Java学习日记4(Servlet监听器)

    xiaoxiao2021-03-25  60

    监听器

    事件分为三个部分:

    事件源:事件发生的场所,比如tomcat事件:ServletContextEvent事件处理器:ServletContextListener,也就是监听器 contextDestroyed(ServletContextEvent sce) contextInitialized(ServletContextEvent sce)

    只要servlet容器实列化ServletContext对象,contextInitialized()方法自动调用 只要Servlet容器销毁ServletContext对象,contextDestroyed()自动调用

    其实不止ServletContext对象有监听器,session什么的也都有,查询API便可以知道。

    实现步骤:

    编写事件处理器,实现处理器接口 注册给Servlet容器

    配置xml:

    <web-app> <listener> <listener-class>com.oracle.WebinitListener</listener-class> </listener> </web-app>

    也可以用Annotation:

    @WebListener

    两个简单的Listener: ServletContextListener:

    package com.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class ServletContextListenerDemo implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { //当容器销毁时,回调此方法 System.out.println("销毁ServletContext........."); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("初始化ServletContext.............."); //当容器初始化ServletContext 回调此方法 // DBpool db=new DBPool(); ServletContext sc=arg0.getServletContext(); //ArticleDao ad=new ArticleDaoImp(); //sc.setAttribute("articleDao",ad); sc.setAttribute("pool","pool"); } }

    ServletContextAttributeListener:

    package com.listener; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.annotation.WebListener; @WebListener public class ServletContextAttrDemo implements ServletContextAttributeListener { @Override public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中加了一个属性:"+arg0.getName()+"--"+arg0.getValue()); } @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中删除了一个属性:"+arg0.getName()+"--"+arg0.getValue()); } @Override public void attributeReplaced(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中替换一个属性:"+arg0.getName()+"--"+arg0.getValue()); } }

    我们也可以在listener中加入代码,实现我们需要的功能。

    转载请注明原文地址: https://ju.6miu.com/read-35962.html

    最新回复(0)