第一天项目内容请看:
7.11 上午:http://www.jianshu.com/p/c64dcabb299e
7.11 下午:http://www.jianshu.com/p/0bc090495213
之前的成果:
1.png
今天的成果:
登陆.png 注册界面.png 登陆跳转界面.png 登陆成功.png当然还有登陆错误界面... 就不上图了
代码请参见:
https://github.com/hongXkeX/small_web_7.13
下面来总结老师讲的重点:
index.jsp.png此处关键是:
1.把 onclick 从表单处移“进入”submit处
2.进入用submit 注册用普通的button
(button和submit区别请参考:http://blog.csdn.net/x_fledgling/article/details/53842684 )
3.注意<input type="hidden" name="method" value="login" />一句的作用。
关键代码:
<body>
![](zt.jpg) <br/>
<p> 星辰聊天室登陆界面 </p>
<form id="form1" method="post" action="message" >
用户名:<br/>
<input type = "text" name = "username"/>
<input type = "button" value = "注册" onclick="location.href='register.jsp'"> <br/> <br/>
密码: <br/>
<input type="password" name = "pass"/>
<input type="hidden" name="method" value="login" />
<input type="submit" value="进入" name="subf" onclick="return check()"/>
</form>
</body>
然后讲解的重点是jsp页面延时跳转到另一个页面:
实现方法一:
跳转关键语句.png
关键语句:
<meta http-equiv="refresh" content="3;url=main.jsp">
其中3为延时秒数 ulr后为跳转目标jsp文件。
实现方法二:
跳转关键语句2.png <body>
<% response.setHeader("refresh", "2;url=index.jsp"); %>
</body>
其中2为延时秒数 ulr后为跳转目标jsp文件。
再来看后台关键代码:
后台传输显示.png
message = "登陆成功";
req.setAttribute("mess", message);
// 将页面转发到login_ok.jsp,并且携带request和response对象
req.getRequestDispatcher("login_ok.jsp").forward(req, resp);
此语言将提示字符串信息发送给login_ok.jsp文件:
login_ok.jsp.pnglogin_ok.jsp文件关键代码:
<body>
<br/>
${ mess } <br/>
正在进入聊天室...
</body>
其中
换行为格式化, ${ mess } 对应后台语句req.setAttribute("mess", message); 中的mess参数。
后台和jsp文件结合产生的效果:
效果.png
另外说明实现代码的关键几点:
1.注册没用数据库,使用的是Map容器,这就需要我们把注册数据后台处理文件和登陆数据处理文件放到到一起(即Message.java一个文件),分成两个文件无法一边注册map.put() 和 登陆遍历验证存在性!如:
2.相关验证字符串要用的方式:
String message = "";
String name = req.getParameter("username") == null?"":req.getParameter("username");
不用此方式会发生空指针异常!!! 也要求我们需要采用try catch 异常处理机制:
3.采用异常处理:
try.png catch.png4.容器Map要采用public static 修饰:
static map.png若不采用static修饰(即不变成类成员变量) 会出现容器无法存储账号-密码 数据! 原因貌似是产生了多线程,每进入一次方法都会产生新的Map,当然也要注意生命周期的问题!!!
感觉加static 也是一种妥协且简单处理之法,学习到后面再用更好的方法解决之。
5.<input type="hidden" name="method" value="login" /> 之用:
a.png b.png登陆表单提交所在index.jsp文件:
index.jsp.png
注册表单提交所在register.jsp文件:
register.jsp.png
type="hidden" 使类似input等元素不可见,并且给两个文件的代码name属性赋相同的值("method"), value属性赋不同的值, 后台依fs.equals()方法判断是登陆表单提交还是注册表单提交,此法以把两部分逻辑代码早早区分开以不混乱(因为没用数据库,导致一个文件代码逻辑混乱,所以必须用if判断早早分开!)
今天的不足之处是密码的正则表达式不太清楚,等的和大家交流下如何实现老师要求的密码格式:非空 大小写字母 数字 _ , !@#$% 密码长度8到16位,(密码必须包含数字以及大小写字母)
有会的小伙伴可以留言。
有不足之处还请批评指正,不胜感激。
先写这些把,后续有想起来的再来补...
网友评论