zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    How to call javascript function on page load in asp.net
    How to run a function when the page is loaded?
    JavaScript 查看stack trace
    查看jQuery file upload的image preview如何工作的
    JavaScript-Templates
    Bootstrap 4
    Bootstrap 3 Glyphicons are not working
    WebPack Task Runner
    AMD
    技术干货的选择性问题
  • 原文地址:https://www.cnblogs.com/vanl/p/5753722.html
Copyright © 2011-2022 走看看