html(三)注册页面与重定向
注册和登陆的建立是通过界面post提交表单然后在测试界面获取提交的值,进行判断。
1.测试传来的值,是否为空,将值传回到测试界面:
("Reg.jsp?errorCode=" + 1)
?号是 “拼接” 传值:
if ("".equals(username) || username == null) {
response.sendRedirect("Reg.jsp?errorCode=" + 1);
return;
}
2.传回来的值进行输出:
String errorCode=request.getParameter("errorCode");
if("1".equals(errorCode)){
out.print("用户名和密码不能为空");
}
3.查看登陆名和密码值是否一致:(通过数据库验证:具体内容看下一篇,简单的可以自己一个默认的测试。)
User user = new User(0, username, password);
new UserDao().Reg(user);
response.sendRedirect("LOGIN.jsp");
1.注册:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>注册</title> 8 </head> 9 <body> 10 <% 11 String errorCode=request.getParameter("errorCode"); 12 if("1".equals(errorCode)){ 13 out.print("用户名和密码不能为空"); 14 } 15 %> 16 <form action="DoReg.jsp" method="post"> 17 <tr><td>username:<input type="text" name="username"></td></tr><br> 18 <tr><td>password:<input type="password" name="password"></td></tr><br> 19 <input type="submit"> 20 </form> 21 </body> 22 </html>
2.注册测试:
1 <%@page import="com.etc.Dao.UserDao"%> 2 <%@page import="com.etc.entity.User"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <% 6 String username = request.getParameter("username"); 7 String password = request.getParameter("password"); 8 9 if ("".equals(username) || username == null) { 10 response.sendRedirect("Reg.jsp?errorCode=" + 1); 11 return; 12 } 13 if ("".equals(password) || password == null) { 14 response.sendRedirect("Reg.jsp?errorCode=" + 1); 15 return; 16 } 17 18 User user = new User(0, username, password); 19 new UserDao().Reg(user); 20 21 response.sendRedirect("LOGIN.jsp"); 22 %>
3.登陆:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>登陆</title> 8 </head> 9 <body> 10 <form name="form1" method="post" action="DoLogin.jsp"> 11 <table border="0" align="center"> 12 <tr> 13 <td>用户名</td> 14 <td><input type="text" name="username"></td> 15 </tr> 16 <tr> 17 <td>密码</td> 18 <td><input type="password" name="password"></td> 19 </tr> 20 <tr> 21 <td><input type="submit"></td> 22 </tr> 23 24 25 </table> 26 </form> 27 <% 28 String errorCode=request.getParameter("errorCode"); 29 if("1".equals(errorCode)){ 30 out.print("用户名或密码不能为空"); 31 } 32 if("2".equals(errorCode)){ 33 out.print("用户名或密码错误"); 34 } 35 %> 36 37 38 39 </body> 40 </html>
4.登陆测试:
1 <%@page import="com.etc.entity.User"%> 2 <%@page import="com.etc.Dao.UserDao"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html> 6 <html> 7 <head> 8 <meta charset="UTF-8"> 9 <title>登陆测试</title> 10 </head> 11 <body> 12 <% 13 String username = request.getParameter("username"); 14 String password = request.getParameter("password"); 15 16 if (username == null || "".equals(username) || password == null || "".equals(password)) { 17 response.sendRedirect("LOGIN.jsp?errorCode=" + 1); 18 } 19 20 UserDao userDao = new UserDao(); 21 User user=userDao.login(username, password); 22 if(user==null){ 23 response.sendRedirect("LOGIN.jsp?errorCode=" + 2); 24 }else{ 25 response.sendRedirect(request.getContextPath()+"/NewFile.jsp"); 26 } 27 28 29 %> 30 </body> 31 </html>
response.sendRedirect:重定向。
request.getRequestDispatcher("").forward(request, response) : 转发。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
在服务器组件收到用户请求后。经过处理修改用户请求。在返回给用户。这样用户再次使用这个请求就会被动的使用新的请求了。(重定向一般是为了防止用户提交完数据后点浏览器刷新或点后退之后产生重复提交)
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
在服务器组件收到用户请求后。经过它的处理后有传递给了另一个组件。不修改用户的请求码。各组件处理完之后在返回给用户,例如主页面的框架。
区别:
解释一 :
一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
解释二
重定向,其实是两次request,
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。
解释三
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
-------------------------------------------
新人只求记录学习生活!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!