初识Session——概述、常用方法、使用细节

HttpSession概述
  • HttpSession:服务器端会话管理技术

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

    域对象功能作用
    ServletContext应用域在整个应用之间实现数据共享
    ServletRequest请求域在当前的请求或请求转发之间实现数据共享
    HttpSession会话域在当前会话范围之间实现数据共享
  • 补充:

    • HttpSession,它虽然是服务端会话管理技术的对象,但它本质仍是一个Cookie

    • 是一个由服务器自动创建的特殊的Cookie,Cookie的名称就是JSESSIONID,Cookie的值是服务器分配的一个唯一的标识

    • 当我们使用HttpSession时,浏览器在没有禁用Cookie的情况下,都会把这个Cookie带到服务器端,然后根据唯一标识去查找对应的HttpSession对象,找到了,我们就可以直接使用了

HttpSession的常用方法
返回值方法名说明
voidsetAttribute(String name,Object)设置共享数据
ObjectgetAttribute(String name)获取共享数据
voidremoveAttribute(String name)移除共享数据
StringgetId()获取唯一标识名称
voidInvalidate()让session立即失效
HttpSession的获取
  • 获取HttpSession是通过HttpServletRequest接口中的两个方法获取的:
返回值方法名说明
HttpSessiongetSession()获取HttpSession对象
HttpSessiongetSession(boolean create)获取HttpSession对象,未获取到是否自动创建
HttpSession的使用
  • 案例演示:
@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的用户名
        String username = req.getParameter("username");
        //2.获取HttpSession的对象
        HttpSession session = req.getSession();
        //3.将用户名信息添加到共享数据中
        session.setAttribute("username",username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}


@WebServlet("/servletDemo02")
public class ServletDemo02 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取HttpSession对象
        HttpSession session = req.getSession();
        System.out.println(session);
        System.out.println(session.getId());
        //2.获取共享数据
        Object username = session.getAttribute("username");
        //3.将数据响应给浏览器
        resp.getWriter().write(username+"");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}
  • 验证:demo1和demo2的session是否是同一个对象

  • 访问:分别访问两个demo,发现一致(也可以通过Network查看)

HttpSession的钝化和活化
  • 什么是钝化和活化

    • 钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上
    • 活化:相反的状态
  • 何时钝化

    • 第一种情况:当访问量很大时,服务器会根据 getLastAccessTime 来进行排序,对长时间不用,但是还没到过期时间的 HttpSession 进行序列化。

    • 第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化

  • 注意

    • HttpSession 的序列化由服务器自动完成,我们无需关心
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值