首页 > Web开发 > 详细

HttpSession

时间:2019-05-11 10:29:29      阅读:100      评论:0      收藏:0      [点我收藏+]

 

 

 

HttpSession(****重点****)

1.HttpSession概述

  *HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端的对象,保存在服务器端!

  *HttpSession是Servlet三大域对象之一(request、session、application(ServletContext)),所以它也有setAttribute()、getAttribute()、removeAttribute()方法

  *HttpSession底层依赖Cookie,或是URL重写!

2.HttpSession的作用

  *会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!

    >会话:一个用户对服务器的多次连贯性的请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!!!

  *服务器会为每个客户端创建一个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);

3.案例1:演示session中会话的多次请求中共享数据

  *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 

然后会在控制台打印:

金泰妍

  

 4.案例2:演示保存用户登录信息(精通)

  *案例相关页面和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,下次登录的时候,用户名直接填写在用户名的输入框中!

 

 

 

*****注意:用户名中不能输入中文,有待完善...

 


 5.HttpSession原理(理解)

  *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();

 技术分享图片

 

HttpSession

原文:https://www.cnblogs.com/xjs1874704478/p/10845335.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!