Servlet监听器

  • 在特定事件发生时自动调用特定的监听器接口实现类的方法

  • 使用时需要在 web.xml中进行配置

    示例

      <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/javaee"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
                   version="2.5">
    
              <listener>
                  <listener-class>listener.CounterListener</listener-class>
              </listener>
          </web-app>
    
  • 在Servlet2.5中,共有8个监听器接口。

    其中

    有4个接口关注 session

    2个接口关注 ServletContext

    2个接口关注 HTTPServletRequest

  • HttpSessionListener 监听器接口

    (1) 在会话对象被Servlet和JSP创建时,会自动调用 sessionCreated()方法;
    (即便是没有显示的创建 session并添加属性,每次打开一个浏览器也会自动有一个session,详见 "./关闭浏览器后Session就销毁了吗.md")

    示例

      HttpSession session = request.getSession();
      session.setAttribute("username", "Chen Bo");
    

    (2) 在会话对象被销毁时,会自动调用 sessionDestroyed()方法

    示例

      session.invalidate();
    
  • HttpSessionAttributeListener 监听器接口

    (1) 在会话对象增加新的属性时,自动调用 attributeAdded() 方法;

    示例

      session.setAttribute("username", "Chen Bo");
    

    (2) 在会话对象的已有属性的值发生改变时,自动调用 attributeReplaced() 方法;

    示例

      session.setAttribute("username", "Chen Bo");
      session.setAttribute("username", "Zhang Bo");
    

    (3) 在会话对象删除属性时,自动调用 attributeRemoved() 方法

    示例

      session.removeAttribute("username");
    
  • HTTPSessionBindingListener 监听器接口

    (1) 如果一个类实现了 HTTPSessionBindingListener 接口,且这个类的一个对象加入到 session 中的时候,自动调用 valueBound() 方法;

    示例

      HTTPSessionBindingListenerImplementer hTTPSessionBindingListenerImplementer = new HTTPSessionBindingListenerImplementer();
    
      session.setAttribute("HTTPSessionBindingListener", hTTPSessionBindingListenerImplementer);
    

    (2) 如果一个类实现了 HTTPSessionBindingListener 接口,且这个类的一个对象从 session 中移除的时候,自动调用 valueUnbound() 方法;

    示例

      session.removeAttribute("HTTPSessionBindingListener");
    
  • HTTPSessionActivationListener 监听器接口

    (1) 会话对象钝化(暂时将会话对象通过序列化的方式存储到磁盘上)时,自动调用 sessionWillPassivate() 方法;

    (2) 会话对象活化(钝化的逆过程)时,自动调用 sessionDidActivate() 方法

  • ServletContextListener 监听器接口

    (1) 每个在Web容器中运行的Web应用都有一个javax.servlet.ServletContext对象,这个对象在JSP文件中为application对象;在Servlet中,该对象可以通过this.getServletContext()获取

    (2) 在Web容器加载Web应用时(例如启动服务器)会自动调用 contextInitialized()方法;

    (3) 在Web容器销毁Web应用时(例如关闭服务器)会自动调用 contextDestroyed()方法

  • ServletContextAttributeListener 监听器接口

    (1) 当Servlet中的ServletContext对象或JSP中的application对象增加新的属性时,自动调用 attributeAdded()方法;

    示例1

      ServletContext servletContext = this.getServletContext();
      servletContext.setAttribute("username", "Bochen");
    

    示例2

      <%
          application.setAttribute("username", "Bochen");
      %>
    

    (2) 当Servlet中的ServletContext对象或JSP中的application对象的已有属性的值发生改变时,自动调用 attributeReplaced()方法;

    示例1

      ServletContext servletContext = this.getServletContext();
      servletContext.setAttribute("username", "Bochen");
      servletContext.setAttribute("username", "Shuochen");
    

    示例2

      <%
          application.setAttribute("username", "Bochen");
          application.setAttribute("username", "Shuochen");
      %>
    

    (3) 当Servlet中的ServletContext对象或JSP中的application对象删除已有属性时,自动调用 attributeRemoved()方法;

    示例1

      ServletContext servletContext = this.getServletContext();
      servletContext.setAttribute("username", "Bochen");
      servletContext.removeAttribute("username");
    

    示例2

      <%
          application.setAttribute("username", "Bochen");
          application.removeAttribute("username");
      %>
    
  • ServletRequestListener 监听器接口

    (1) 在Servlet的HTTPServletRequest对象或JSP中request对象被创建时,会自动调用 requestInitialized()方法;

    (2) 在Servlet的HTTPServletRequest对象或JSP中request对象被销毁时,会自动调用 requestDestroyed()方法;

  • ServletRequestAttributeListener 监听器接口

(1) 当Servlet中的request对象或JSP中的request对象增加新的属性时,自动调用 attributeAdded()方法;

示例1

    request.setAttribute("username", "Bochen");

示例2

    <%
        request.setAttribute("username", "Bochen");
    %>

(2) 当Servlet中的request对象或JSP中的request对象的已有属性的值发生改变时,自动调用 attributeReplaced()方法;

示例1

    request.setAttribute("username", "Bochen");
    request.setAttribute("username", "Shuochen");

示例2

    <%
        request.setAttribute("username", "Bochen");
        request.setAttribute("username", "Shuochen");
    %>

(3) 当Servlet中的request对象或JSP中的request对象删除已有属性时,自动调用 attributeRemoved()方法;

示例1

    request.setAttribute("username", "Bochen");
    request.removeAttribute("username");

示例2

    <%
        request.setAttribute("username", "Bochen");
        request.removeAttribute("username");
    %>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值