ToB企服应用市场:ToB评测及商务社交产业平台

标题: day21-web开发会话技术03 [打印本页]

作者: 张国伟    时间: 2022-11-22 23:01
标题: day21-web开发会话技术03
WEB开发会话技术03

10.问题引出

11.Session基本介绍


11.1session可以做什么

11.2如何理解session

12.Session常用方法

13.Session底层实现机制

13.1原理分析图

整个过程如下:
一个浏览器向服务器发送请求,要操作session时,一定会调用request.getSession()方法。
如果服务器在本次会话中,创建了session,则在响应头中将以Set-Cookie:JSESSIONID=xxxx的形式返回一个cookie给浏览器保存。下一次浏览器发送请求时,服务器就可以拿到cookie中的JSESSIONID的值,在map中找到该浏览器对应的session,直接操作。
这里的map可以理解为在Tomcat中还维护了一个容器HashMap,这个容器中以JSESSIONID为key,以session为value,完成两者的绑定。
13.2代码演示

演示Session底层实现机制-创建和读取Session
13.2.1创建session的实例分析

web.xml:
  1. <servlet>
  2.     <servlet-name>CreateSession</servlet-name>
  3.     <servlet-class>com.li.session.CreateSession</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6.     <servlet-name>CreateSession</servlet-name>
  7.     <url-pattern>/createSession</url-pattern>
  8. </servlet-mapping>
复制代码
CreateSession:
  1. package com.li.session;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. public class CreateSession extends HttpServlet {
  7.     @Override
  8.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  9.         doPost(request, response);
  10.     }
  11.     @Override
  12.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13.         //System.out.println("CreateSession doPost被调用...");
  14.         //1.获取session(同时也可能创建session)
  15.         HttpSession session = request.getSession();//注意这个地方已经把sessionId分配了
  16.         //2.给session获取id
  17.         System.out.println("当前sessionid= " + session.getId());
  18.         //3.给session存放一些数据
  19.         session.setAttribute("email", "zs@qq.com");
  20.         //4.给浏览器发送一个回复
  21.         response.setContentType("text/html;charset=utf-8");
  22.         PrintWriter writer = response.getWriter();
  23.         writer.print("<h1>创建/操作session成功...</h1>");
  24.         writer.flush();
  25.         writer.close();
  26.     }
  27. }
复制代码
13.2.2读取session的实例分析

web.xml:
  1. <servlet>
  2.     <servlet-name>ReadSession</servlet-name>
  3.     <servlet-class>com.li.session.ReadSession</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6.     <servlet-name>ReadSession</servlet-name>
  7.     <url-pattern>/readSession</url-pattern>
  8. </servlet-mapping>
复制代码
ReadSession:
  1. package com.li.session;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. public class ReadSession extends HttpServlet {
  7.     @Override
  8.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  9.         doPost(request, response);
  10.     }
  11.     @Override
  12.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13.         //System.out.println("ReadSession doPost被调用...");
  14.         //演示读取session
  15.         //1.获取session,如果没有session也会创建
  16.         HttpSession session = request.getSession();
  17.         //2.给session获取id
  18.         System.out.println("ReadSession 当前sessionid= " + session.getId());
  19.         //3.读取属性
  20.         Object email = session.getAttribute("email");
  21.         if (email != null) {
  22.             System.out.println("session属性 email= " + (String) email);
  23.         } else {
  24.             System.out.println("session中没有 email属性");
  25.         }
  26.         //3.给浏览器发送一个回复
  27.         response.setContentType("text/html;charset=utf-8");
  28.         PrintWriter writer = response.getWriter();
  29.         writer.print("<h1>读取session成功...</h1>");
  30.         writer.flush();
  31.         writer.close();
  32.     }
  33. }
复制代码
14.Session生命周期


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4