Java Web——Servlet的数据共享方案:HttpSession接口(会话作用域对象)

简介: Java Web——Servlet的数据共享方案:HttpSession接口(会话作用域对象)

文章目录:


1.介绍

2.Cookie类和HttpSession接口的区别

3.应用举例

3.1 代码部分 

3.2 运行结果部分

4.工作原理图

5.request.getSession()   request.getSession(false)

6.HttpSeesion创建的session对象的销毁时机 

1.介绍


1.    HttpSession接口来自于Servlet规范中。

2.    HttpSession接口实现类由Http服务器厂商提供。

3.    HttpSession接口修饰对象被称为会话作用域对象。

4.    如果两个Servlet为同一个用户/同一个浏览器提供服务,此时可以借助于用户的HttpSession对象进行数据共享。

2.Cookie类和HttpSession接口的区别


1.    类型不同: Cookie是一个类,HttpSession是一个接口。

2.    存放位置不同:Cookie存放在客户端计算机,HttpSession(会话作用域对象)存放在服务端计算机内存。

3.    存放共享数据个数不同:一个cookie对象只能存储一个共享数据,一个会话作用域对象通过map存储,因此可以任何个共享数据。

4.    存放数据类型不同:cookie只能存放String类型的共享数据,会话作用域对象存放Object类型的共享数据。

5.    与用户关系: 一个用户可以拥有多个cookie,一个用户只能拥有一个会话作用域对象。

6.    参照物不同:cookie相当于用户在服务端拥有的会员卡,会话作用域对象相当于用户在服务端拥有的私人储物柜。

3.应用举例


3.1 代码部分 

package com.songzihao.controller;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
/**
 *
 */
public class OneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用请求对象向Tomcat索要当前用户的私人储物柜
        HttpSession session=request.getSession();
        //将共享数据添加到当前用户的私人储物柜
        session.setAttribute("key1",500);
    }
    /**
     *  tomcat将当前用户的柜子编号以cookie形式写入响应头
     *  cookie("JSESSIONID",柜子编号)
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}
package com.songzihao.controller;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
/**
 *
 */
public class TwoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用请求对象向Tomcat索要当前用户的私人储物柜
        HttpSession session=request.getSession(false);
        //读取OneServlet存入的共享数据
        Integer data= (Integer) session.getAttribute("key1");
        System.out.println("TwoServlet得到的共享数据===" + data);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>com.songzihao.controller.OneServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/one</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>TwoServlet</servlet-name>
        <servlet-class>com.songzihao.controller.TwoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TwoServlet</servlet-name>
        <url-pattern>/two</url-pattern>
    </servlet-mapping>
    <session-config>
        <!-- session最大空闲时间5分钟 -->
        <session-timeout>5</session-timeout>
    </session-config>
</web-app>


3.2 运行结果部分


4.工作原理图


5.request.getSession()  与  request.getSession(false)


在代码部分中,我们可以看到OneServlet中调用的是  request.getSession()TwoServlet中调用的是  request.getSession(false)


这两个方法肯定是有区别的,下面我们来看一下:

1.    request.getSession():如果当前用户在服务端拥有私人储物柜,要求tomcat返回这个储物柜。
                                   
如果当前用户在服务端尚未拥有私人储物柜,要求tomcat为当前用户创建一个全新的私人储物柜。

2.    request.getSession(false):如果当前用户在服务端拥有私人储物柜,要求tomcat返回这个储物柜。
                                           
如果当前用户在服务端尚未拥有私人储物柜,要求tomcat返回null

3.    如果当前用户身份【经过登录验证审核判定为合法】,此时应该使用request.getSession()来索要私人储物柜。

4.    如果当前用户身份尚未确认合法,此时应该使用request.getSession(false)来索要私人储物柜。


6.HttpSeesion创建的session对象的销毁时机


1.    在浏览器关闭时,切断了用户与浏览器之间联系。但是tomcat是服务端计算机中资源调度软件无法侦测浏览器何时关闭的,因此在浏览器关闭时,服务端是不会销毁用户的session

2.    tomcat在创建session对象时,设置一个【最大空闲时间】。如果session对象从上次使用完毕到现在空闲时间达到了【最大空闲时间】,tomcat认为用户放弃了自己的session.此时tomcat负责销毁。

3.    tomcat设置【最大空闲时间】是30分钟。

4.    web.xmsession的最大空闲时间:



目录
打赏
0
0
1
0
85
分享
相关文章
WEB CAD插件通过上下文对象MxPluginContext修改UI界面的方法
本文介绍了如何使用MxPluginContext动态控制MxCAD项目的UI界面。通过该上下文对象,开发者可以灵活设置UI配置,如控制操作栏显隐、编辑按钮、添加侧边栏等。具体方法包括调用`getUiConfig()`获取并修改`mxUiConfig.json`中的属性,实现界面的定制化。此外,还提供了控制命令行聚焦的功能,解决输入框焦点锁定问题。详细代码示例和效果对比图展示了具体实现步骤,帮助开发者更好地适配项目需求。
new操作符背后的秘密:揭开Web前端对象创建的神秘面纱!
【8月更文挑战第23天】在Web前端开发中,`new`操作符是创建对象实例的核心。本文以`Person`构造函数为例,通过四个步骤解析`new`操作符的工作原理:创建空对象、设置新对象原型、执行构造函数并调整`this`指向、判断并返回最终对象。了解这些有助于开发者更好地理解对象实例化过程,从而编写出更规范、易维护的代码。
57 0
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
162 6
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
72 3
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
68 1
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
78 1
Java零基础(14) - Java作用域,了解一下!
【8月更文挑战第14天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
133 4
|
7月前
Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
133 3
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等