JavaWeb Listener之HttpSessionActivationListe…
2019-08-31 07:18:25来源:博客园 阅读 ()
JavaWeb Listener之HttpSessionActivationListener ,session钝化、活化
HttpSessionActivationListener 监听HttpSession对象的活化、钝化
钝化:将HttpSession对象从内存中转移至硬盘,存储为.session文件。
活化:把HttpSession对象从持久化状态转变为运行状态(从硬盘加载到内存,恢复原样)。
@WebListener()
public class MyListener implements HttpSessionActivationListener , Serializable {
public void sessionWillPassivate(HttpSessionEvent se) {
//钝化时调用
//.....
}
public void sessionDidActivate(HttpSessionEvent se) {
//活化时调用
//......
}
}
session.setAttribute("myListener",new MyListener());
session.setAttribute("name","chy");
HttpSessionActivationListener和HttpSessionBindListener一样,需要放到某个session中才能监听,监听的是某个具体的session。
钝化是一种特殊的序列化,活化是一种特殊的反序列化,特殊在作用范围限定为session。
既然钝化是一种特殊的序列化,那就是说session中只有可序列化的对象才会被钝化。java自带的数据类型大多数都已implements Serializable,是可序列化的。我们自己写的实体类,需要实现Serializable接口或Externalizable接口才会被钝化。
HttpSessionActivationListener对象要放到session中,也是session中的对象,
- 如果我们写的类在实现HttpSessionActivationListener的同时,还实现了Serializable接口或Externalizable接口,钝化时这个监听器可以监听到钝化事件,调用对应的方法,活化时可以监听到活化事件,调用对应的方法。
- 如果我们写的类在实现HttpSessionActivationListener的同时,没有实现Serializable接口或Externalizable接口,则钝化时这个监听器可以监听到钝化事件,调用对应的方法,但活化时不能监听到活化事件,对应的方法不起作用。
Session钝化的配置
HttpSessionActivationListener这个监听器需要配合钝化配置使用。有2种方式可以配置钝化:
- 在tomcat -> conf -> context.xml 的<Context>中配置
- 在web下新建META-INF目录,接着在META-INF下新建context.xml:
<?xml version="1.0" ?> <Context> <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="2"> <Store className="org.apache.catalina.session.FileStore" directory="d:/session"> </Store> </Manager> </Context>
也是在<Context>中配置。
maxIdleSwap指定session在空闲多少分钟后(在多少分钟内没有再次使用此session),会被钝化到硬盘的.session文件中。
directory指定.session文件的位置,指定的目录不存在时会自动创建。
在tomcat中配置的是全局的,对tomcat下所有部署的WebApp都有效。
在项目中配置的,只作用于这个项目。
Eclipse会自动创建META-INF目录,但IDEA不会自动创建,需要我们需要手动在web下创建META-INF,META-INF和WEB-INF同一级别。
Session钝化配置,监管的是所有的session对象,哪个session在指定时间内没被使用,就钝化这个session到硬盘,一个session一个.session文件。
当一个session对象钝化到.session文件后,之后再次钝化时,还是钝化到同一个.session文件中(先删除原有内容,再写入)。
HttpSessionActivationListener监听的是某个具体的session,只监听所在session的钝化、活化。
监听器只起到监听作用,并不能实现钝化,监听器只是监听这一行为,并做出相应的处理。
session超时,是会删除该session对象,此session中的数据全部丢失;
session钝化是将此session暂存到硬盘,需要时加载到内存接着用,数据依然在。
某个jsp中,先request.getSession()获取session,然后使用Session中的数据。我一直停留在这个jsp页面,算不算一直在使用这个session?
不算。jsp和php一样,是在服务器端解析的。tomcat解析jsp(此时使用session),然后以html文档的形式返回给浏览器,浏览器显示的是html文档,html是静态资源,和session没有半毛钱关系。
session钝化对高并发项目很有用。
比如双11、双12,大家都先打开购物车,不做其他操作,坐等时间一到就购买。
服务器内存中有大量的Session对象,但很多session在几分钟内都是闲置的。通过session钝化将这些闲置的session暂存到硬盘,减轻服务器负担,等到需要时会自动活化。
原文链接:https://www.cnblogs.com/chy18883701161/p/11436983.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:SpringBoot 基础(二)
- JavaWeb 之 EL与JSTL 2020-05-06
- JavaWeb会话技术之Session 2020-05-02
- JavaWeb-监听器入门 2020-04-29
- Javaweb 基础知识 2020-04-24
- JavaWeb-JSP粗浅了解 2020-04-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash