*HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端的对象,保存在服务器端!
*HttpSession是Servlet三大域对象之一(request、session、application(ServletContext)),所以它也有setAttribute()、getAttribute()、removeAttribute()方法
*HttpSession底层依赖Cookie,或是URL重写!
*会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
>会话:一个用户对服务器的多次连贯性的请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!!!
*服务器会为每个客户端创建一个session对象,session就好比客户端在服务器端的账户,它们被服务器保存到一个Map中,这个Map被称之为session缓存!
>Servlet中得到session对象:HttpSession session=request.getSession();
>Jsp中得到session对象:session是jsp的内置对象,不用创建就可以直接使用!
*session域相关方法:
>void setAttribute(String name,Object value);
>Object getAttribute(String name);
>void removeAttribute(String name);
*AServlet:向session域中保存数据
*BServlet:从session域中获取数据
*演示:
>第一个请求:访问AServlet
>第二个请求:访问BServlet
AServlet:
1 public class AServlet extends HttpServlet { 2 3 public void doGet(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 //得到session 6 HttpSession session = request.getSession(); 7 session.setAttribute("name", "金泰妍"); 8 9 } 10 }
BServlet:
1 public class BServlet extends HttpServlet { 2 3 public void doGet(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 6 //得到session 7 HttpSession session = request.getSession(); 8 String name = (String) session.getAttribute("name"); 9 System.out.println(name); 10 } 11 }
在浏览器依次请求http://localhost:8080/XJS_Session/AServlet 和 http://localhost:8080/XJS_Session/BServlet
然后会在控制台打印:
金泰妍
*案例相关页面和Servlet:
>login.jsp:登录页面
>succ1.jsp:只有登录成功才能访问的页面
>succ2.jsp:只有登录成功才能访问的页面
>LoginServlet:校验用户是否登录成功!
*各页面和Servlet内容:
>login.jsp:提供登录表单,提交表单请求LoginServlet
>LoginServlet:获取请求参数,校验用户是否登录成功
<>失败:保存错误信息到request域,转发到login.jsp(login.jsp显示request域中的错误信息)
<>成功:保存用户信息到session域中,重定向到succ1.jsp页面,显示session域中的用户信息
>succ1.jsp:从session域中获取用户信息,如果不存在,显示“您还没有登录”。存在则显示用户信息
>succ2.jsp:从session域中获取用户信息,如果不存在,显示“您还没有登录”。存在则显示用户信息
只要用户没有关闭浏览器,session就一直存在,那么保存在session中的用户信息也就一起存在!那么用户访问succ1和succ2就会通过!
login.jsp:
1 <body> 2 <h1>登录</h1> 3 <% 4 String uname=""; 5 //读名为username的cookie 6 Cookie[] cookies=request.getCookies(); 7 if(cookies!=null){ 8 for(Cookie c:cookies){ 9 //如果为空显示:"" 10 //如果不为显示:Cookie值 11 if("username".equals(c.getName())){ 12 uname=c.getValue(); 13 } 14 } 15 } 16 %> 17 18 <% 19 String message="";//一个空字符串 20 String msg=(String)request.getAttribute("msg");//获取错误信息 21 if(msg!=null){ 22 message=msg; 23 } 24 %> 25 <font color="red"><b><%=message %></b></font> 26 <form action="/XJS_Session/LoginServlet" method="post"> 27 用户名:<input type="text" name="username" value="<%=uname %>"> 28 密 码:<input type="password" name="password"> 29 <input type="submit" value="提交"> 30 </form> 31 </body>
LoginServlet:
1 public class LoginServlet extends HttpServlet { 2 3 public void doPost(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 request.setCharacterEncoding("utf-8"); 6 String username = request.getParameter("username"); 7 String password = request.getParameter("password"); 8 System.out.println("username:"+username+", password:"+password); 9 if(username!="" && password!=""){ 10 if("xjs".equals(username) && "0309".equals(password)){ 11 //设置Cookie 12 response.setContentType("text/html;charset=utf-8"); 13 Cookie cookie=new Cookie("username",username); 14 cookie.setMaxAge(60*60); 15 response.addCookie(cookie);//把它显示到用户名文本框中 16 17 18 //登录成功 19 HttpSession session=request.getSession(); 20 session.setAttribute("username", username); 21 session.setAttribute("password", password); 22 //重定向到succ1.jsp 23 response.sendRedirect("/XJS_Session/succ1.jsp"); 24 } 25 else{ 26 System.out.println("username:"+username+", password:"+password); 27 //输入的用户名和密码不存在 28 request.setAttribute("msg", "用户名和密码不存在!!!"); 29 //用转发 30 RequestDispatcher rd=request.getRequestDispatcher("/login.jsp"); 31 rd.forward(request, response); 32 } 33 }else{ 34 request.setAttribute("msg", "用户名或密码不能为空!!!"); 35 //用转发 36 RequestDispatcher rd=request.getRequestDispatcher("/login.jsp"); 37 rd.forward(request, response); 38 } 39 } 40 }
succ1.jsp:
1 <body> 2 <% 3 if(session.getAttribute("username")==null&&session.getAttribute("password")==null){ 4 //重定向到login.jsp 5 response.sendRedirect("/XJS_Session/login.jsp"); 6 return;//别的就不执行了 7 } 8 %> 9 <% 10 String username=(String)session.getAttribute("username"); 11 String password=(String)session.getAttribute("password"); 12 out.print("用户名:"+username); 13 out.print("密码:"+password); 14 15 %> 16 </body>
succ2.jsp:
1 <body> 2 <% 3 if(session.getAttribute("username")==null&&session.getAttribute("password")==null){ 4 //重定向到login.jsp 5 response.sendRedirect("/XJS_Session/login.jsp"); 6 return;//别的就不执行了 7 } 8 %> 9 <% 10 String username=(String)session.getAttribute("username"); 11 String password=(String)session.getAttribute("password"); 12 out.print("用户名:"+username); 13 out.print("密码:"+password); 14 15 %> 16 </body>
1.当用户在登录界面输入xjs和0309,就可以成功登录!
2.如果直接访问succ1.jsp的话,会被重定向到login.jsp
3.如果登录成功的话,会在服务器端保存用户信息到session域;也会向客户端保存cookie,下次登录的时候,用户名直接填写在用户名的输入框中!
*****注意:用户名中不能输入中文,有待完善...
*request.getSession()方法:
>获取Cookie中的JSESSIONID:
<>如果sessionId不存在,创建session,把session保存起来,把新创建的sessionId保存到Cookie中。
<>如果sessionId存在,通过sessionId查找session对象,如果如果没有查找到,创建session,把session保存起来,把新创建的sessionId保存到Cookie中。
<>如果sessionId存在,通过sessionId查找到了session对象,那么就不会再创建session对象了。
<>返回session。
>如果创建了新的session,浏览器会得到一个包含了sessionId的Cookie,这个Cookie的生命为-1,即只在浏览器内存中存在,如果不关闭浏览器,那么Cookie
*服务器不会马上给你创建session,在第一次获取session时,才会创建!request.getSession();
原文:https://www.cnblogs.com/xjs1874704478/p/10845335.html