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>