码迷,mamicode.com
首页 > 其他好文 > 详细

tomcat 服务器的几个重要监听 方法 与 使用

时间:2020-02-13 23:02:02      阅读:156      评论:0      收藏:0      [点我收藏+]

标签: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 }
MyServletContextListener

 

(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 }
MyHttpSessionListener

 

(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 销毁");
    }
    
}
MyServletRequestListener

 

 

 

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也可以是不同的。

 

tomcat 服务器的几个重要监听 方法 与 使用

标签:oncreate   分配   let   oid   这一   close   应用   play   out   

原文地址:https://www.cnblogs.com/c2g5201314/p/12305351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!