监听器Listener与过滤器Filter

时间:2020-12-11 18:25:58

Listener是Servlet规范的一个高级特性。用于监听JavaWeb中的事件,例如创建、修改、删除Session、request 、context等并触发相应的事件。

Listener需要实现相应的接口,并在web.xml中配置相应的listener

<!-- <listener>标签一般配置在<servlet>标签前面 -->
<listener>
<listener-class>全类名</listener-class>
</listener>

Servlet 2.5 规范*有8种监听器 分别用于监听Session、request、Context等的创建、销毁、属性变化等。

1 . HttpSessionListener接口

    public void sessionCreated(HttpSessionEvent arg0) {
HttpSession session=arg0.getSession();
}
public void sessionDestroyed(HttpSessionEvent arg0) {
HttpSession session=arg0.getSession();
}

2 . ServletRequestListener接口

    public void requestDestroyed(ServletRequestEvent arg0) {
ServletRequest request=arg0.getServletRequest();
}
public void requestInitialized(ServletRequestEvent arg0) {
ServletRequest request=arg0.getServletRequest();
}

3 . ServletContextListener接口

    @Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}

4 . ServletContextListener接口
可以用其实现当态登录,比如把所有的session存放到Map中,若其他地点登录该账户,根据Map中其session,把该session中的登录的账号信息删除,即只让新登录的可行。如session中放入(“personInfo”,PersonInfo)。

    @Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

5 . ServletContextAttributeListener接口

    public void attributeAdded(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub

}

6 . ServletRequestAttributeListener接口

    @Override
public void attributeAdded(ServletRequestAttributeEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
// TODO Auto-generated method stub

}

以下两种监听器监听的是session中的对象不是session本身,故不需要再web.xml中申明
比如在JavaBean中实现下面两个接口,当把该bean放入session中会触发下面接口中的方法。

7 . HttpSessionBindingListener接口
实现该接口的对象被被绑定、解绑到session时会触发相应的方法。

    @Override
public void valueBound(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub

}

8 . HttpSessionActivationListener接口

服务器关闭时,会将session中的内容保存的硬盘上,这个过程叫钝化;服务器启动时,会将硬盘中的session内容重新加载。

//对象重新加载
@Override
public void sessionDidActivate(HttpSessionEvent arg0) {
// TODO Auto-generated method stub

}
//对象钝化
@Override
public void sessionWillPassivate(HttpSessionEvent arg0) {
// TODO Auto-generated method stub

}

Filter用于对request或response进行修改。
Filter接口。

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub

}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

需要在web.xml中配置<filter>