标签:oncreate 分配 let oid 这一 close 应用 play out
1.
总结一下tomcat 服务器里的三种监听
ServletContextListener
HttpSessionListener
ServletRequestListener
这是我要做的三个自定义重写 类 分别继承上面三个接口
2具体源码
(1) ServletContextListener
用于监听服务器的启动与关闭
1 package cn.cen2guo.clinic.listener; 2 3 4 import javax.servlet.ServletContextEvent; 5 import javax.servlet.ServletContextListener; 6 7 8 /** 9 * 用于监听服务器的启动与关闭 10 */ 11 public class MyServletContextListener implements ServletContextListener { 12 @Override 13 public void contextInitialized(ServletContextEvent sce) { 14 // System.out.println("创建ServletContext对象"); 15 } 16 17 @Override 18 public void contextDestroyed(ServletContextEvent sce) { 19 // System.out.println("销毁ServletContext对象"); 20 } 21 }
(2) HttpSessionListener
用于监听session的创建与销毁
1 package cn.cen2guo.clinic.listener; 2 3 4 import javax.servlet.http.HttpSessionEvent; 5 import javax.servlet.http.HttpSessionListener; 6 7 /** 8 * 用于监听session的创建于销毁,目前没啥用处 9 */ 10 11 public class MyHttpSessionListener implements HttpSessionListener { 12 13 @Override 14 public void sessionCreated(HttpSessionEvent se) { 15 // System.out.println("session 被创建了"); 16 // System.out.println(se.getSession().getId()); 17 } 18 19 @Override 20 public void sessionDestroyed(HttpSessionEvent se) { 21 // System.out.println("session 被销毁了"); 22 // System.out.println(se.getSession().getId()); 23 // System.out.println("销毁结束"); 24 } 25 26 27 }
(3)ServletRequestListener
用于监听每一次请求 的开始【初始化】 与结束【销毁】
package cn.cen2guo.clinic.listener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; /** * 用于监听每一次请求, */ //使用注解@WebListener 和 @Component ,则不需要去web.xml文件里注册监听 , //同时spring扫面也不需要特意设定可以扫描到这里 ,但是仍然可以识别,这就很舒服了 //@WebListener //@Component public class MyServletRequestListener implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent sre) { // System.out.println("requestInitialized 初始化"); } @Override public void requestDestroyed(ServletRequestEvent sre) { // System.out.println("requestDestroyed 销毁"); } }
3. 注册监听有两种,任意一种都可以:
方法一:使用spring注解
方法二 : 去web.xml文件注册监听标签
4.心得
(1) 服务器开启,servletcontextListener首先被使用。servletcontext被创建了;
服务器关闭的前一刻才会触发其销毁监听内容
(2) 网页向controller请求,ServletRequestListener 首先检测出来,
执行了他的requestInitialized 方法,即初始化request;等待contronller事务结束后,才出发servletRequestListener的销毁事件
(3)并不是每次前端向服务器请求 都会 验证要不要创建Session ,而是当服务器调用了HttpServletRequest.getSession(true) 后,
才会创建一个服务器内独一无二的session会话 ,其session id 则是自动分配一个无序的字符串,[得到两个一样的几率非常低]
然后才保存在前端[一般在cookie里面]。
(4)session 可以设置存活时间,到期后自动注销 ,但往往都是默认值,每当前端浏览器关闭后,session才开始以默认期限倒计时,
等待时间到后才销毁,并不是浏览器一关闭,就会销立马销毁 ,当然,也没必要手动对其销毁,让其自毁自灭就行,
根据这一特性,就无法让服务器判断前端用户是否仍在,想要实现这个功能,只能使用websocket 或者长轮询,长轮询太消耗资源了,不建议使用,
websocket则是最好的方式!!!
(5) 从Tomcat设置的cookie路径来看,它对不同的应用程序设置的cookie路径是不同的,这样不同的应用程序所用的session id是不同的,因此即使在
同一个浏览器窗口里访问不同的应用程序,发送给服务器的session id也可以是不同的。
标签:oncreate 分配 let oid 这一 close 应用 play out
原文地址:https://www.cnblogs.com/c2g5201314/p/12305351.html