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


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

  • 相关阅读:
    自动添加控件,一次提交多条记录。
    Asp.Net 2.0 的 Master Page(母版页)
    vs2008中文版提供下载(包含中文msdn),包括vs2008序列号和破解方法。
    C# 2.0 :仿MSN提示框or仿迅雷提示框(.Net2.0).rar
    httpanalyzer 结合 HttpWebRequest Post的运用
    xp访问权限问题的解决(绝对有效)
    Request.params、Request、Request.querystring、Request.Form 具体区别!
    C# List<> 泛型中遍历不同类型
    备份与恢复数据库的存储过程
    .Net 生成不重复的随机数
  • 原文地址:https://www.cnblogs.com/c2g5201314/p/12305351.html
Copyright © 2020-2023  润新知