【Servlet08】监听器listener

监听器是用来监听Servlet中对象(包括ServletContext对象、Request对象、Session对象)的活动的;

使用上的具体的体现是implements一系列的接口,然后实现这些接口中的一些方法来完成监听的功能;

监听器功能比较单一,并且往后使用的监听器大多是别人已经实现好了的直接使用即可,所以本部分做了解即可。

  • ServletContext对象:

    • ServletContextListener接口

    • ServletContextAttributeListener接口

  • Request对象:

    • ServletRequestListener接口

    • ServletRequestAttributeListener接口

  • Session对象:

    • HttpSessionListener接口

    • HttpSessionAttributeListener接口

可以看到,三种不同的对象要实现的接口从名字上大致相同,并且功能也大致相同,仅以ServletContext对象做演示;

创建一个自定义监听器:

public class MySCListener implements ServletContextListener, ServletContextAttributeListener {
}

需要重写的方法:

实现:

@WebListener
public class MySCListener implements ServletContextListener, ServletContextAttributeListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext对象被实例化");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象被销毁");
    }

    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("ServletContext作用域增加了一个键值对");
        System.out.println("ServletContext作用域增加了一个键值对,键:"+scae.getName());
        System.out.println("ServletContext作用域增加了一个键值对,值:"+scae.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("ServletContext作用域删除了一个键值对");
        System.out.println("ServletContext作用域删除了一个键值对,键:"+scae.getName());
        System.out.println("ServletContext作用域删除了一个键值对,值:"+scae.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("ServletContext作用域修改了一个键值对");
        System.out.println("ServletContext作用域修改了一个键值对,键:"+scae.getName());
        System.out.println("ServletContext作用域修改了一个键值对,值:"+scae.getValue());
    }
}
  • @WebListener:监听器注解;

  • public void contextInitialized(ServletContextEvent sce):ServletContext实例化时自动调用该方法;

  • public void contextDestroyed(ServletContextEvent sce):ServletContext对象销毁时自动调用该方法;

  • public void attributeAdded(ServletContextAttributeEvent scae):ServletContext作用域增加了一个键值对时自动调用该方法,并且能通过scae.getName()scae.getValue()分别得到键和值;

  • public void attributeRemoved(ServletContextAttributeEvent scae):ServletContext作用域删除了一个键值对时自动调用该方法,得到键和值的方法同add;

  • public void attributeReplaced(ServletContextAttributeEvent scae):ServletContext作用域修改了一个键值对时自动调用该方法,得到键和值的方法同add;

编写一个Servlet进行测试:

@WebServlet("/SCListenerServlet")
public class SCListenerServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        servletContext.setAttribute("name","zhangsan");
        servletContext.setAttribute("name","lisi");
        servletContext.removeAttribute("name");
    }
}

测试结果:

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/javaweb/server/servlet/2154/listener/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录