Listener监听器

  前言:之前写了一篇关于Filter的文章:http://www.cnblogs.com/vanl/p/5742501.html,现在再来一篇Listener的文章,Filter和Listener在项目中经常用到,巧妙的使用可以达到事半功倍的效果。

一:Listener的定义与作用

  监听器Listener就是在application,session,request三个对象创建,销毁,或者往其中添加修改删除属性时自动执行代码的功能组件。Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。

二:Listener的分类与使用

  1.ServletContext监听

  ServletContextListener接口:用于对Servlett整个上下文进行监听(创建,销毁)。

    public void contextInitialized(ServletContextEvent sce) //上下文初始化

    public void contextDestoryed(ServletContextEvent sce) //上下文销毁

    public ServletContext getServletContext(); //ServletContextEvent事件:取得一个ServletContext(application)对象

 

  ServletContextAttributeListener接口:对Servlet上下文属性的监听(增删改属性)。

    public void attributeAdded(ServletContextAttributeEvent scab);//增加属性

    public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除

    public void attributeRepalced(ServletContextAttributeEvent scab);属性替换

    //ServletContextAttributeEvent事件:能取得设置属性的名称与内容

    public string getName();//取得属性名

    public Object getValue();//取得属性值

  2.Session监听

  Session属于Http协议下的内容,接口位于javax.servlet.http.*包下。

  HttpSessionListener接口:对session的整体状态的监听。

    public void sessionCreated(HttpSessionEvent se); //session创建

    public void sessionDestoryed(HttpSessionEvent se); //session销毁

    //HttpSessionEvent事件:

    public HttpSession getSession(); //取得当前操作的session

  HttpSessionAttributeListener接口:对session的属性监听。

    public void attributeAdded(HttpSessionBindingEvent se); //增加属性

    public void attributeRemoved(HttpSessionBindingEvent se);//删除属性

    public void attributeReplaced(HttpSessionBindingEvent se);//替换属性

    //HttpSessionBindingEvent事件

    public String getName();//取得属性的名称

    public String getValue();//取得属性的值

    public HttpSession getSession();取得当前的session

    session销毁有两种情况:

    1.session超时,web.xml配置:

    

    2.手工使session失效

    public void invalidate();//使session失效方法。session.invalidate();

  3.Request监听

  ServletRequestListener:用于对Request请求进行监听(创建,销毁)

    public void requestInitialized(ServletRequestEvent sre);//request初始化

    public void requesyDestoryed(ServletRequestEvent sre);//request销毁

    //ServletRequestEvent事件:

    public ServletRequest getServletRequest();//取得一个ServletRequest对象

    public ServletRequest getServletContext();//取得一个ServletContext对象

   ServletRequestAttributeListener:对Request属性的监听(增删改属性)。

    public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性

    public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除

    public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换

    //ServletRequestAttributeEvent事件: 

    public String getName();//取得属性名称

    public Object getValue();//取得属性的值

  4.在web.xml中配置

  Listener的配置信息必须在Filter和Servlet的配置之前,Listener的初始化(ServletContextListener初始化)比Servlet和Filetr都优先,而销毁比Servlet和Filter都慢。

  

  5.Spring监听器ContextLoaderListener的作用

  在开始使用Spring读取配置文件ApplicationContext.xml的时候,没有配置监听器,在web.xml中配置如下:

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext.xml</param-value>

  </context-param>

  但是在Tomcat启动的时候日志中显示如下:

  信息:NO Spring WebApplicationInitializer types detected on classpath

  也就是Spring没有配置文件,导致后面的访问发生错误。

  后来查找之下是发现没有在web.xml中使用ContextLoaderListener监听器。设置监听器:

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  Spring提供ServletContextListener接口的一个实现类ContextLoaderListener监听器,该类可以作为Listener使用,在启动Tomcat容器的时候,该类的作用就是自动装载ApplicationContext的配置信息,如果没有设置contextConfigLocation的初始参数则会使用默认参数WEB-INF路径下的application.xml文件。如果需要自定义读取多个配置文件或者修改默认路径,则可以在web.xml中设置:

  

  ContextLoaderListener会读取这些XML文件并产生WebApplicationContext对象,然后将这个对象放置在ServletContext的属性里,这样只要我们得到Servlet就可以得到WebApplicationContext对象,并利用这个对象访问spring容器管理的bean。

posted @ 2016-08-09 16:29  夏日树叶  阅读(3502)  评论(0编辑  收藏  举报