1.Listener的定义与作用
1.1.监听器Listener就是在application,session,request三个对象创建,销毁,或者往其中添加修改删除属性时自动执行代码的功能组件
1.2.Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等
- Listener的分类与使用
2.1.ServletContext(Web应用)监听
(1)ServletContextListener接口:用于监听Web应用的启动和关闭;
public void contextInitialized(ServletContextEvent sce) //上下文初始化
public void contextDestoryed(ServletContextEvent sce) //上下文销毁
public ServletContext getServletContext(); //ServletContextEvent事件:取得一个ServletContext(application)对象
(2)ServletContextAttributeListener接口:用于监听Servlet上下文属性的改变(增删改属性)
public void attributeAdded(ServletContextAttributeEvent scab);//增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除
public void attributeRepalced(ServletContextAttributeEvent scab);属性替换
2.2.Session监听
Session属于Http协议下的内容,接口位于javax.servlet.http.*包下。
(1)HttpSessionListener接口:用于监听用户session的开始和结束
public void sessionCreated(HttpSessionEvent se); //session创建
public void sessionDestoryed(HttpSessionEvent se); //session销毁
(2)HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变
public void attributeAdded(HttpSessionBindingEvent se); //增加属性
public void attributeRemoved(HttpSessionBindingEvent se);//删除属性
public void attributeReplaced(HttpSessionBindingEvent se);//替换属性
扩展:session销毁有两种情况:
(1)session超时,web.xml配置 :session120分钟后超时销毁
<session-config>
<session-timeout>120</session-timeout>
<session-config>
(2)手工使session失效方法
public void invalidate() {session.invalidate();}
2.3.Request监听
(1)ServletRequestListener:用于监听用户的请求(创建,销毁)
public void requestInitialized(ServletRequestEvent sre);//request初始化
public void requesyDestoryed(ServletRequestEvent sre);//request销毁
(2)ServletRequestAttributeListener:对Request属性的监听(增删改属性)
public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性
public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除
public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换
3.在web.xml中配置
Listener的配置信息必须在Filter和Servlet的配置之前,Listener的初始化(ServletContextListener初始化)比Servlet和Filetr都优先,而销毁比Servlet和Filter都慢
4.Spring监听器ContextLoaderListener的作用
(1)Spring提供ServletContextListener接口的一个实现类ContextLoaderListener监听器(Spring已封装)
(2)在启动Tomcat容器的时候,该类的作用就是自动装载ApplicationContext的配置信息
(3)ContextLoaderListener会读取这些XML文件并产生WebApplicationContext对象(Spring自动生成该对象)
(4)将这个对象放置在ServletContext的属性里,这样只要得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean
(5)如果没有设置contextConfigLocation的初始参数则会使用默认参数WEB-INF路径下的application.xml文件
(6)默认路径下如果没找到就会报错
扩展:<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
Spring配置文件中改监听器的作用就是为了服务器启动时,自动装载ApplicationContext的配置信息,最终获得配置信息中的bean
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
1.org.springframework.web.context.ContextLoaderListener:只负责监听web容器启动和关闭的事件
2.但如果spring容器中的Bean需要request,session,globalsession作用域的支持,spring容器本身就必须获得web容器的HTTP请求事件,
以HTTP请求的事件"驱动"Bean作用域的控制逻辑
3.使用request,session,globalsession这些作用域之前,必须在web容器中进行一些额外的配置
4.就需要配置org.springframework.web.context.request.RequestContextListener