8- Cookie&Session&JSP -Session

HttpSession 介绍

  • HttpSession: 服务器端会话管理技术
    本质上也是采用客户端会话管理技术
    只不过在客户端保存的是一个特殊标识,而且共享的数据保存到了服务器端的内存对象中
    每次请求时,会将特殊标识带到服务器端,根据这个表示来找到对应的内存空间,从而实现数据共享
    是Servlet规范中四大域对象之一的会话域对象
  • 作用: 可以实现数据共享


    image.png

HttpSession 常用方法


image.png

HttpSession 获取

  • HttpSession 实现类对象是通过HttpServletRequest 对象来获取


    image.png

    获取Session的两个方法.png

HttpSession 使用

  • 需求说明
    通过第一个Servlet 设置共享数据用户名,并在第二个Servlet获取到
  • 最终目的
    掌握HttpSession 的基本使用,如何获取和使用
  • 实现步骤
    1. 在第一个Servlet 中获取请求的用户名
    2. 获取SerlvetSession对象
    3. 将用户名设置到共享数据中
    4. 在第二个 Servlet 中获取HttpSession对象
    5. 获取共享数据用户名
    6. 将获取到用户名响应给客户端

实现代码1:

/*
    Session 的基本使用
* */
@WebServlet("/servletSession1")
public class servletSession extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的用户名  访问时自己拼接username参数
        String username = req.getParameter("username");
        //2. 获取HttpSession对象
        HttpSession session = req.getSession();

        //这两条输出语句是验证session是不是一样的
        System.out.println(session);
        System.out.println(session.getId());
        //3. 将用户名设置到共享数据中
        session.setAttribute("username",username);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doGet(req, resp);
    }
}

实现代码2:

/*
    Session 的基本使用
* */
@WebServlet("/servletSession2")
public class servletSession2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取HttpSession 对象
        HttpSession session = req.getSession();

        //这两条输出语句是验证session是不是一样的
        System.out.println(session);
        System.out.println(session.getId());
        //获取共享数据
        Object username = session.getAttribute("username");
        //将数据响应给浏览器
        resp.getWriter().write(username + "");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

访问测试
image.png

HttpSession 细节

  • 唯一标识的查看


    image.png
  • 浏览器禁用Cookie 访问的Session不同
    1. 方式一: 通过提示信息告知用户,大部分网站采用的解决方式(推荐)
    2. 方式二: 访问时拼接jsessionid表示,通过encodeURL()方法重写地址(了解)


    image.png

钝化和活化

  • 什么是钝化和活化
    钝化: 序列化,把长时间不用, 但还不到过期时间的HttpSession进行序列化,写道磁盘上
    活化: 相反的状态
  • 何时钝化
    第一种情况:
    a: 当访问量很大时,服务器会根据getLastaccessTime 来进行排序;
    b: 对长时间不用,但是还没有到过期时间的HttpSession进行序列化
    第二种情况: 当服务进行重启的时候,为了保持客户HttpSession 中的数据,也要对其进行序列化
  • 注意
    HttpSession 的序列化由服务器自动完成,我们无需关心
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容