06CookieSession-12. HttpSession的钝化和活化

2023-12-01 14:58

本文主要是介绍06CookieSession-12. HttpSession的钝化和活化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(一)钝化
当服务器正常关闭时,还存活着的session(在设置时间内没有销毁) 会随着服务器的关闭被以文件(“SESSIONS.ser”)的形式存储在tomcat 的work 目录下,这个过程叫做Session 的钝化。

(二)活化
当服务器再次正常开启时,服务器会找到之前的“SESSIONS.ser” 文件,从中恢复之前保存起来的Session 对象,这个过程叫做Session的活化。

(三)注意事项
1)想要随着Session 被钝化、活化的对象它的类必须实现Serializable 接口,还有要注意的是只有在服务器正常关闭的条件下,还未超时的Session 才会被钝化成文件。当Session 超时、调用invalidate 方法或者服务器在非正常情况下关闭时,Session 都不会被钝化,因此也就不存在活化。
2)在被钝化成“SESSIONS.ser” 文件时,不会因为超过Session 过期时间而消失,这个文件会一直存在,等到下一次服务器开启时消失。
3)当多个Session 被钝化时,这些被钝化的Session 都被保存在一个文件中,并不会为每个Session 都建立一个文件。

这里写图片描述

(四)演示
定义两个Servlet ,在一个Servlet 中将“username” 保存在Session 中,另一个Servlet 中获取到该“username”,输出到浏览器。

SessionServlet1

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/session1")
public class SessionServlet1 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//将username = zhangsan 保存在Session 中request.getSession().setAttribute("username", "zhangsan");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

SessionServlet12

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/session2")
public class SessionServlet2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取到username 输出到浏览器String username = (String) request.getSession().getAttribute("username");response.getWriter().write(username);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

①:首先访问“session1”,将数据存储到Session 域中,接着再访问“session2”,可以获取到“username”的值,如下图
这里写图片描述

②:在Session 时间还未过期的时间内,让服务器正常关闭,在Tomcat 中的work 目录下,会多出一个“SESSIONS.ser” 文件,里面存储着还未过期的Session 信息,这也就说明Session 被钝化了,以文件的形式保存在本地磁盘中。
这里写图片描述

③:当服务器再次启动时,该配置文件会消失,当我们再次访问“session2”(不再访问“session1”的前提下),发现仍然可以获取到“username”的值,这时Session 就从被钝化的文件中活化。
这里写图片描述
这里写图片描述

④:当服务器非正常情况下关闭时(超时、调用invalidate 方法),Session 不会被钝化,所以在服务器再次启动时,去访问“session2”,会因为没有获取到Session 报空指针异常(下面的演示是服务器非正常情况下关闭)。
这里写图片描述

注:由于String 类本身已经实现了序列化接口“java.io.Serializable”,因此会被钝化成文件。如果我们想要自己定义的“POJO”类也可以钝化与活化,那么也必须要实现“java.io.Serializable”接口。这也是为什么我们建议将“POJO”类都实现序列化接口的一个原因。

这篇关于06CookieSession-12. HttpSession的钝化和活化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441601

相关文章

钝化的中年人

人到中年,特别容易钝化。   最近半年,你学习到了什么新技能。读了什么书,有什么新的体会,陌生信息接受消化比例如何。 如果没有,还停留在吃老本的阶段,ok,那可以肯定你已经是钝化的中年人。 刀剑不打磨,就会自我生锈,人不打磨呢?   我们在幼儿园、小学、初中、高中、大学的时候,目标非常明确就是升入更好的学校,家长和老师逼着,身边的同学和环境也都是积极向上的。 等到毕业,走上社会,瞬间

struts2--获取request、session、application、HttpRequest、HttpSession、ServletContext

request、session、application、HttpRequest、HttpSession、ServletContext 四种方法:只使用第二种方法,并且request和application不经常用到,另外, (1)使用struts2容器提供的ActionContext:(前三者)依赖于容器 <span style="font-size:14px;">package co

Spring session与HttpSession的区别

作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域。在设计和构建 Java Web 应用时,理解这些作用域,如何将数据与对象和这些作用域交互是十分重要的。【在 StackOverflow 上有一篇文章可以帮助你快速了解 request 和 session 作用域】 SPRING M

The method ** from the type UsrTokenBo refers to the missing type HttpSession

关于如题的错误,说是缺少HttpSession。而且还会有一个错误  The import javax.servlet cannot be resolved   解决:在报错的HttpSession的Import上点击  fix project setup,确定就好了。 至于是什么原因先不管,记录下来。

【Struts2学习笔记(8)】访问或添加request/session/application属性获取HttpServletRequest / HttpSession / ServletContex

(1)访问或添加request/session/application属性 public String scope() throws Exception{ActionContext ctx = ActionContext.getContext();ctx.getApplication().put("app", "应用范围");//往ServletContext里放入appctx.get

Hibernate中Session与HttpSession的区别

一、org.hibernate.Session 它是hibernate操作数据库的一个句柄对象。它跟上面那个Session唯一的相似处就是名字有点像,其他没任何一样的地方。 一般的Hibernate程序中,Session由用户手动获取,手动关闭。 一般情况下,由于sessionFactory不是轻量级的,因此使用static静态代码块实现sessionFactory 的创建,操作一个数据库只用

替换Servlet容器的HttpSession实现集群中Session共享(With Redis)

本文是我个人在开发web-security 安全框架中使用的方案。 在Web Server集群环境中需要实现 session 共享,一个很好的方法就是将 session 数据存放至 Redis 中。我打算在自己的安全框架中集成此功能,只需要几行配置就能自动让你的 web 项目集成 redis session 共享功能。 实现思路为: 将 Servlet 容器的HttpSession实现替换成

刀具刃口钝化

​刀具刃口钝化是指在刀具制作过程中,通过一系列的加工步骤使刀具刃口表面变得光滑、平整,去除因磨削加工造成的微观缺口,以提高刀具的切削性能和寿命。这一过程对于保障刀具的稳定性和精度至关重要,尤其是在高速切削和高精度加工中更是不可或缺。 1、刀具刃口钝化的必要性 刀具在经过砂轮或金刚石砂轮刃磨后,刃口表面可能会出现微小缺口,这些缺口在切削过程中易于扩展,加速刀具磨损和损坏。现代高速切削加工

session和httpsession的区别

Session在网络中被称为会话。由于HTTP协议是一种无状态的协议,也就是当一个客户端发送请求,服务器端收到请求,并返回响应后,该连接就结束了,而服务器不保存任何相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的web页面间进行跳转时,保存用户的状态,使得整个用户会话一直存在下去,直到浏览器关闭。 一个session就是一系列某用户和服务器间的通讯

HttpSession过期时间设置

Web服务器无法根据HTTP协议判断当前的浏览器是否还会继续访问该服务器,页无法检查浏览器是否关闭,所以只要浏览器关闭,Session就消失的说法是错误的,关闭浏览器之后重新打开浏览器之所以会见了新的Session并不是因为原来的Session消失了,而是重新建立了Session了,所以才会给人之前的Session已经消失的错误感觉。其实只要HttpSession对象只要没有超过限定的时间段就会一