监听器(Listener)
作用:可以检测整个WEB的执行情况
上下文监听(ServletContext(application)的监听机制)
- 1. 对Servlet上下文状态监听:ServletContextListener
· 上下文初始化
public void contextInitialized(ServletContextEvent sce);
· 上下文销毁
public void contextDestroyed(ServletContextEvent sce);
· ServletContextEvent事件的方法
public ServletContext getServletContext();
- 2. 对Servlet上下文属性监听: ServletContextAttributeListener
· 属性增加
public void attributeAdded(ServletContextAttributeEvent event);
· 属性替换
public void attributeReplaced(ServletContextAttributeEvent event);
· 属性删除
public void attributeRemove(ServletContextAttributeEvent event);
实现对上下文的监听
public class MyListener implements ServletContextListener, ServletContextAttributeListener{}
web.xml中配置监听
<listener>
<listener-class>cn.my.listener.MyListener</listener-class>
</listener>
上下文是针对于整个服务器的监听,大部分情况需要进行的是用户(session)监听操作,需要使用以下两个接口
1. 对于session状态监听,使用HttpSessionListener
- 创建session:
public void sessionCreated(HttpSessionEvent se);
- session销毁
public void sessionDestroyed(HttpSessionEvent se)
- 事件:HttpSessionEvent
-- 取得当前session对象
public HttpSession getSession():
2. 对session属性进行监听,使用 HttpSessionAttributeListener
- 增加session属性
public void attributeAdded(HttpSessionBindingEvent event);
- 删除session属性
public void attributeRemoved(HttpSessionBindingEvent event);
- 替换session属性
public void attributeReplaced(HttpSessionBindingEvent event);
- 事件:HttpSessionBindingEvent 方法
-- 取得属性名称:
public String getName();
-- 取得属性内容:
public Object getValue();
-- 取得当前session:
public HttpSession getSession()
关于session的销毁
在session的运行过程中,客户端和服务器端并不会一直保持连接,用户关闭浏览器时,服务器只会认为该客户暂时离开,等下还会发出请求,所以不会销毁session。
需要销毁session的两种情况
1. session对象中invalidate()方法的调用,表示立刻销毁Session
2. 服务器有一个自己的销毁时间,Tomcat是30分钟,用户可以在conf/web.xml文件对其配置进行修改(session保存的时间越长,对服务器的负担就越大)
<session-config>
<session-timeout>30</session-timeout>
</session-config>