servlet监听器

何谓监听器

  • Listener 用于监听 java web程序中的事件,例如创建、修改、删除session、request、context等,并触发响应的事件。
  • Listener 对应观察者模式,事件发生的时候会自动触发该事件对应的Listener。 Listener 主要用于对 session、request、context 进行监控。

监听器实现

  • 不同功能的Listener 需要实现不同的 Listener 接口,一个Listener也可以实现多个接口,这样就可以多种功能的监听器一起工作。
  • HttpSessionListener、ServletContextListener、ServletRequestListener分别监听 session、context、request 的创建与销毁。
public class TestListener implements HttpSessionListener, ServletRequestListener, ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext context = sce.getServletContext();
        System.out.println("context create: " + context.getContextPath());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("context destroy: " + sce.getServletContext().getContextPath());
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        ServletRequest req = sre.getServletRequest();
        System.out.println("request destroy: " + req.getCharacterEncoding());
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        ServletRequest req = sre.getServletRequest();
        System.out.println("request initialize: " + req.getCharacterEncoding());
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        System.out.println("session create: " + session.getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        System.out.println("session destroy:" + session.getLastAccessedTime());
    }

}
  • HttpSessionAttributeListener、ServletContextAttributeListener、ServletRequestAttributeListener分别监听不同作用域中对象属性的变化(新增、移除、修改)。
public class SessionAttributeListenerTest implements HttpSessionAttributeListener {  

    public void attributeAdded(HttpSessionBindingEvent se) {  
        HttpSession session = se.getSession();  
        String name = se.getName();  
        ...
    }  

    public void attributeRemoved(HttpSessionBindingEvent se) {  
        HttpSession session = se.getSession();  
        String name = se.getName();  
        ...
    }  

    public void attributeReplaced(HttpSessionBindingEvent se) {  
        HttpSession session = se.getSession();  
        String name = se.getName();  
        Object oldValue = se.getValue();  
        ...
    }  
}  
  • HttpSessionBindingListener(当对象放到session中触发)和HttpSessionActivationListener(当服务器关闭时触发,用于session对象的钝化(保存到硬盘)及重新加载)监听session内的对象,不需要在web.xml中配置。
  • listener标签与 listener-class标签,listener一般配置在 servlet标签的前面。
<listener>
    <listener-class>***</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值