介绍之前,先看下对这三大作用域的简短介绍。如果有兴趣可以参见这篇博客(http://blog.csdn.net/lvzhiyuan/article/details/4664624)
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
下面开始正式介绍今天这三大域对象监听器。(这里只简单介绍三大域对象生命周期的监听)
先了解下监听器的作用吧
ServletContext
生命周期监听:ServletContextListener
public void contextInitialized(ServletContextEvent servletContextEvent)ServletContext创建时调用
public void contextDestroyed(ServletContextEvent servletContextEvent)ServletContext销毁时调用
代码
HttpSession
生命周期监听:HttpSessionListener
public void sessionCreated(HttpSessionEvent httpSessionEvent)HttpSession创建时调用
public void sessionDestroyed(HttpSessionEvent httpSessionEvent)HttpSession过期时调用
代码
HttpRequest
生命周期监听:ServletRequestListener
public void requestDestroyed(ServletRequestEvent servletRequestEvent)在ServletRequest对象被销毁前调用
public void requestInitialized(ServletRequestEvent servletRequestEvent)在ServletRequest对象被创建后调用
代码
相应监听的类都创建好了,但是tomcat容器并不知道,所以需要告诉他我们定义的监听器(为了更好的演示HttpSessionListener,我们这里设置了session过期时效),因为有java项目中还有可能出现过滤器,拦截器,所以下面用一张图来帮助区分和各自的生命周期
所以在web.xml中配置监听器。注意:监听器>过滤器>serlvet,配置的时候要注意先后顺序
然后看监听器配置
项目还配置了拦截器,不过没有什么区别,正好来研究下各自的生命的周期
下面是项目启动后的后台打印信息,把它拼在一起
各监听器,拦截器执行顺序
1.项目启动时便进入了ServletContext的contextInitialized方法
2.执行HttpRequest的requestInitialized方法
3.拦截器的preHandle方法
4.HttpSession的sessionCreated方法
5.拦截器的postHandle方法
6.拦截器的afterCompletion方法
7.执行HttpRequest的requestDestroyed方法
8.执行HttpSession的sessionDestroyed方法
9.这个自然是ServletContextcontextDestroyed方法
从上面的执行顺序可以很好的证明了上面那张生命周期的图(这里的session是在拦截器之后才执行的是因为,我们在拦截器里面和模拟的登陆接口才创建了session对象,拦截器里的session是为了验证当前用户登陆过而使用的)
三大三大域对象生命周期的监听就到这里了,后面再介绍三大域对象的属性监听,希望能帮到前进路上的你,同时方便自己复习,谢谢网上众多的参考博客,不喜勿喷