美文网首页
Servlet监听器

Servlet监听器

作者: 米都都 | 来源:发表于2019-01-08 10:19 被阅读0次
    • 在特定事件发生时自动调用特定的监听器接口实现类的方法

    • 使用时需要在 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");
        %>

    相关文章

      网友评论

          本文标题:Servlet监听器

          本文链接:https://www.haomeiwen.com/subject/jucvrqtx.html