搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 前端自习室 > 全栈 | 如何在微服务或Tomcat中配置使用Listener

全栈 | 如何在微服务或Tomcat中配置使用Listener

前端自习室 2018-02-28

作为前端开发人员,精通前端的同时,也需要熟悉后台。下面介绍Web应用中常用的监听器。

1. ServletContextListener监听

ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。在微服务中监听app的启动和停止,可以在应用启动时设置全局参数,创建数据库连接池等。



                

public class MyServletContextListener implements ServletContextListener{

    @Override

    public void contextDestroyed(ServletContextEvent arg0) {

        System.out.println("destroyed");

    }


    @Override

    public void contextInitialized(ServletContextEvent event) {

        System.out.println("initialized");

        event.getServletContext().setAttribute("user", "admin");

    }

}



2. HttpSessionListener监听

用户监听客户端会话的创建和销毁。

可以统计在线用户数,设置会话参数等



import javax.servlet.http.HttpSessionListener

public class SessionCounter implements HttpSessionListener

private static int activeSessions =0

/* Session创建事件 */


public void sessionCreated(HttpSessionEvent se) { 

      ServletContext ctx = event.getSession( ).getServletContext( ); 

        Integer numSessions = (Integer) ctx.getAttribute("numSessions"); 

        if (numSessions == null) { 

            numSessions = new Integer(1); 

        } 

        else

            int count = numSessions.intValue( ); 

            numSessions = new Integer(count + 1); 

        } 

        ctx.setAttribute("numSessions", numSessions); 


/* Session失效事件 */


public void sessionDestroyed(HttpSessionEvent se) { 

  ServletContext ctx=se.getSession().getServletContext(); 

  Integer numSessions = (Integer)ctx.getAttribute("numSessions"); 

   if(numSessions == null

            numSessions = new Integer(0); 

        } 

        else

            int count = numSessions.intValue( ); 

            numSessions = new Integer(count - 1); 

        } 


        ctx.setAttribute("numSessions", numSessions);

  } 

}



3. ServletRequestListener监听

  用于监听客户端请求,可以跟踪用户访问轨迹,设置请求参数等。




public class MyServletRequestListener implements ServletRequestListener {

    @Override

    public void requestDestroyed(ServletRequestEvent arg0) {

        System.out.println("requestDestroyed" + "," + new Date());

        System.out.println("当前访问次数:" + arg0.getServletContext().getAttribute("count"));

    }


    @Override

    public void requestInitialized(ServletRequestEvent arg0) {

        System.out.println("requestInitialized" + "," + new Date());

        Object count = arg0.getServletContext().getAttribute("count");

        Integer cInteger = 0;

        if (count != null) {

            cInteger = Integer.valueOf(count.toString());

        }

        System.out.println("历史访问次数::" + count);

        cInteger++;

        arg0.getServletContext().setAttribute("count", cInteger);

    }

}



以上三类Listener在web.xml中配置。


<listener> 
     <listener- class >demo.listener.MyServletContextListener</listener- class

</listener> 

<listener> 
     <listener- class >demo.listener.SessionCounter</listener- class

</listener> 


<listener> 
     <listener- class >demo.listener.MyServletRequestListener</listener- class

</listener> 


4. Web容器的Listener

  由特定的web容器提供,用于监听容器的启动和停止。可以在容器启动时初始化数据库连接池(跨app)。也可以获取容器实力,动态加载APP。以下以Tomcat为例,需要实现LifecycleListerner接口。再讲打开编译成jar包,放在tomcat安装目录下的lib中,并在conf/server.xml文件中配置。



public class MyLifecycleListener implements LifecycleListener{

     public void lifecycleEvent(LifecycleEvent event) { 

         System.out.println("组件类型:"+event.getLifecycle()); 

         System.out.println("生命周期阶段 : "+event.getType());

        }

     }

}



配置Tomcat/conf/server.xml,
加上一句 <Listener className="com.test.listener.MyListener" /> 




版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《全栈 | 如何在微服务或Tomcat中配置使用Listener》的版权归原作者「前端自习室」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读