【Java Web 系列】Session的工作流程与基本使用

377 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

写在前面😘

大一电子信息工程新生,请多多关照,希望能在掘金记录自己的学习历程!

一、Session简介

1️⃣什么是Session

Session服务端会话跟踪技术,将数据保存到服务端

2️⃣Session工作流程

  • 在服务端的AServlet获取一个Session对象,把数据存入其中
  • 在服务端的BServlet获取到相同的Session对象,从中取出数据
  • 就可以实现一次会话中多次请求之间的数据共享了

3️⃣Session API 参考

Session对象由服务器创建,通过 HttpServletRequest.getSession() 方法可以获得 HttpSession 对象

HttpSession 接口定义了一系列对 Session 对象操作的方法,如下表。

返回值类型方法描述
longgetCreationTime()返回创建 Session 的时间。
StringgetId()返回获取 Seesion 的唯一的 ID。
longgetLastAccessedTime()返回客户端上一次发送与此 Session 关联的请求的时间。
intgetMaxInactiveInterval()返回在无任何操作的情况下,Session 失效的时间,以秒为单位。
ServletContextgetServletContext()返回 Session 所属的 ServletContext 对象。
voidinvalidate()使 Session 失效。
voidsetMaxInactiveInterval(int interval)指定在无任何操作的情况下,Session 失效的时间,以秒为单位。负数表示 Session 永远不会失效。

二、Session基本使用

0️⃣获取session

  • 使用request对象获取session对象
HttpSession session = request.getSession();

1️⃣存储数据

  • 存储数据到 session 域中,Object可以存储任意类型的数据
void setAttribute(String name, Object o)

2️⃣获取数据

  • 根据 key,获取值
Object getAttribute(String name)

3️⃣删除数据

  • 根据 key,删除该键值对
void removeAttribute(String name)

4️⃣代码案例

  1. SessionDemo1:获取Session对象、存储数据
/**
 * 存储数据
 */
@WebServlet(name = "SessionDemo1", value = "/s1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.获取session对象
        HttpSession session = request.getSession();
        // 2.存储数据
        session.setAttribute("username","大角牛向前冲");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
  1. SessionDemo2:获取Session对象、获取数据
/**
 * 获取数据
 */
@WebServlet(name = "SessionDemo2", value = "/s2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 获取Session对象
        HttpSession session = request.getSession();
        // 2. 获取数据
        Object username = session.getAttribute("username");
        // 3. 打印结果
        System.out.println(username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
  1. 先访问s1,再访问s2,查看控制台输出结果

image-20220506101356740

写在后面🍻

感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗