zoukankan      html  css  js  c++  java
  • JavaWeb:Listener

    1、ServletContextListener:

    1)、what:监听 ServletContext  对象被创建或销毁的 Servlet 监听器。

    2)、how:

       》创建一个实现了 ServletContextListener 的类,并且实现其中的两个方法

    public class HelloServletContextListner implements ServletContextListener

      》在 web.xml 文件中配置 Listener

      <listener>
            <listener-class>com.atguigu.javaweb.test.HelloServletContextListner</listener-class>
        </listener>

    3)、why:ServletContextListener 是最常用的 Listener ,可以在当前 WEB 应用被加载时对当前 WEB 应用的相关的资源进行初始化操作:闯将数据库连接池,创建 Spring 的 IOC 容器,读取当前 WEB 应用的初始化参数。。。

    4)、API:

    // SerlvetContext 对象被创建(即, 当前 WEB 应用被加载时)的时候, Servlet 容器调用该方法.
    public void contextInitialized(ServletContextEvent sce)

    // SerlvetContext 对象被销毁之前(即, 当前 WEB 应用被卸载时)的时候, Servlet 容器调用该方法.
    public void contextDestroyed(ServletContextEvent sce)

    ServletContextEvent 中的: getServletContext() 获取 ServletContext

    2、ServletRequestListener & HttpSessionListener

    1)、和 ServletContextListener 类似。

    2)、利用 ServletRequestListener、HttpSessionListener 以及 ServletContextListener 可以把 request, session

    及 application 的生命周期进一步的做一了解。

      》request:是一个请求,当一个响应返回时,即被销毁,当发送一个请求时被创建。注意:请求转发的过程是一个 request 对象。重定向是两个请求。

      》session:当第一次访问 WEB 应用的一个 JSP 或 Servlet 时,且该 JSP 或 Servlet 中还需要创建 session 对象,此时服务器会创建一个 session 对象。

           session 销毁:session 过期,直接调用 session 的 invalidate 方法,当前 web 应用被卸载(session 可以被持久化)。

         *关闭浏览器,并不意味着 session 被销毁,还可以通过 sessionid 找到服务器中的 session 对象。

      》application:贯穿于当前的 WEB 应用的生命周期。当前 WEB 应用被加载时创建 application 对象,当前 WEB 应用被卸载时销毁 application 对象。

    3、XxxAttributeListener

    1)、监听 ServletContext, HttpSession, ServletRequest 中添加属性,替换属性,移除属性的事件监听器。

    2)、以 ServletRequestAttributeListener  为例:

    //添加属性时被调用
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("向 request 中添加了一个属性...");
    }
    
    //移除属性时被调用
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        System.out.println("从 request 中移除了一个属性...");
    }
    
    //替换属性时被调用. 
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        System.out.println("request 中属性替换了...");
    }

    3)、这三个 ServletContextAttributeListener,ServletRequestAttributeListener,HttpSessionAttributeListener 监听器较少被使用

    4)、API :

    ServletRequestAttributeEvent:
      > getName(): 获取属性的名字
      > getValue(): 获取属性的值.

    4、HttpSessionBindingListener

    1)、监听实现了该接口的 Java 类的对象被绑定到 session 或从 session 中解除绑定的事件。

      //当前对象被绑定到 session 时调用该方法
      public void valueBound(HttpSessionBindingEvent event)

      //当前对象从 session 中解除绑定调用该方法
      public void valueUnbound(HttpSessionBindingEvent event)

    2)、 注意: 该监听器不需要在 web.xml 文件中进行配置。

    3)、HttpSessionBindingEvent:

      getName()
      getValue()
      getSession()

    4)、该监听器较少被使用。

    5、HttpSessionActivationListener

    1)、监听实现了该接口和 Serializable 接口的 Java 类的对象随 session 钝化和活化事件

      > 活化: 从磁盘中读取 session 对象

      > 钝化: 向磁盘中写入 session 对象

      > session 对象存储在tomcat 服务器的 workCatalinalocalhostcontextPath 目录下. SESSION.SER

    2)、该监听器不需要在 web.xml 文件中进行配置。

    3)、
      //在活化之后被调用.
      public void sessionDidActivate(HttpSessionEvent se)

      //在钝化之前被调用
      public void sessionWillPassivate(HttpSessionEvent se)

      HttpSessionEvent: getSession()

    4)、该监听器较少被使用。

  • 相关阅读:
    Android Studio自动排版的两种方法
    面向对象语言为什么要有访问权限控制
    2017年蓝桥杯省赛A组c++第7题(正则问题)
    2017年蓝桥杯省赛A组c++第1题(走迷宫)
    2017年蓝桥杯省赛A组c++第6题(字符串匹配算法填空)
    2017年蓝桥杯省赛A组c++第5题(递归算法填空)
    2016年蓝桥杯省赛A组c++第9题(逆序串问题)
    2016年蓝桥杯省赛A组c++第7题(图论)
    2016年蓝桥杯省赛A组c++第3题(图论)
    Java的四种内部类(含代码实例)
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6313883.html
Copyright © 2011-2022 走看看