编程环境:IDEA,Tomcat,JavaEE
一、实例二登录
1、在自己建的工程下的web目录下建一个文件夹为login,在login中编写登录代码(其实就是和实例一同一个项目)
2、先建登录页面jsp文件login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录</title> </head> <body> <form action="check.jsp" method="post"> 用户名: <input type="text" name="uname" ><br/> 密码: <input type="password" name="upwd"><br/> <input type="submit" value="登录"><br/> </form> </body> </html>
校验check.jsp页面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>校验登录</title> </head> <body> <form> <% request.setCharacterEncoding("utf-8"); String name=request.getParameter("uname"); String password=request.getParameter("upwd"); if(name.equals("zz")&&password.equals("1111")){ //页面跳转方式一,重定向,数据会丢失 //response.sendRedirect("success.jsp"); //页面跳转方式二,请求转发,数据不会丢失 request.getRequestDispatcher("success.jsp").forward(request,response); }else{ out.println("登录失败,用户名或者密码有误"); } %> </form> </body> </html>
登录成功页面success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String name=request.getParameter("uname"); %> 成功登录 欢迎您: <br/> <%=name%> <br/> </body> </html>
3、运行结果
在check.jsp 中有两种跳转方式:(1)请求转发request.getRequestDispatcher(2)重定向response.sendRedirect("xxx.jsp")
在重定向中调用的是response类
4、response---内置对象,响应对象
常见方法:(1)void addCookie(Cookie cookie)服务端向客户端增加cookie对象(2)void sendRedirect(String location)throws IOException 重定向页面跳转(3)void setContextType(String type)设置服务端响应编码
5、请求转发request.getRequestDispatcher和重定向response.sendRedirect("xxx.jsp")的区别(这个知识挺重要的,我觉得)
(1)相同点:都是改变客户端的请求方向
(2)不同点:
请求转发 | 重定向 | |
地址栏是否改变 | 不改变 |
改变 |
是否保存第一次请求时数据 | 保留 | 不保留 |
请求次数 | 1 | 2 |
跳转发生位置 | 服务端 | 客户端(发出二次请求) |
对于这些不同点,我画个图来解释(请忽略我的渣画技。。)
根据上述图可以看到请求转发是服务端内部将响应客户端的对象指针改变了,而重定向是响应告诉客户端他应该向别的对象请求,然后客户端再一次请求。
补充一点:是否保存第一次请求时数据中数据指的是客户端第一次请求时保存在request中的请求信息,请求转发时,仍然会携带该信息,重定向则不会。