zoukankan      html  css  js  c++  java
  • listener监听器

    监听器

    1、基本概念

      JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

    2、Servlet监听器的分类

      在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContextHttpSessionServletRequest这三个域对象
      Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

    1. 监听域对象自身的创建和销毁的事件监听器。
    2. 监听域对象中的属性的增加和删除的事件监听器。
    3. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。

    3、监听ServletContext域对象的创建和销毁

      ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。

      当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。

      当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。

      ServletContext域对象创建和销毁时机:
        创建:服务器启动针对每一个Web应用创建ServletContext
        销毁:服务器关闭前先关闭代表每一个web应用的ServletContext

    public class MyServletContextListener implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("ServletContext对象创建");
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("ServletContext对象销毁");
        }
    }

    4、监听HttpSession域对象的创建和销毁

      HttpSessionListener 接口用于监听HttpSession对象的创建和销毁
      创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
      销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。

    范例:编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSession对象的创建和销毁

    public class MyHttpSessionListener implements HttpSessionListener {
    
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println( se.getSession() + "创建了!!");
        }
    
        /* HttpSession的销毁时机需要在web.xml中进行配置,如下:
         * <session-config>
                  <session-timeout>1</session-timeout>
              </session-config>
              这样配置就表示session在1分钟之后就被销毁
         */
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("session销毁了!!");
        }
    }

    5、监听ServletRequest域对象的创建和销毁

      ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁
      Request对象被创建时,监听器的requestInitialized(ServletRequestEvent sre)方法将会被调用
      Request对象被销毁时,监听器的requestDestroyed(ServletRequestEvent sre)方法将会被调用

      ServletRequest域对象创建和销毁时机:
        创建:用户每一次访问都会创建request对象
        销毁:当前访问结束,request对象就会销毁

    范例:编写一个MyServletRequestListener类,实现ServletRequestListener接口,监听ServletRequest对象的创建和销毁

    public class MyServletRequestListener implements ServletRequestListener {
    
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println(sre.getServletRequest() + "销毁了!!");
    
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println(sre.getServletRequest() + "创建了!!");
        }
    }

    6.index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
    
    <!DOCTYPE HTML>
    <html>
    <head>
        <title>HttpSessionListener监听器监听HttpSession对象的创建</title>
    </head>
    
    <body>
    一访问JSP页面,HttpSession就创建了,创建好的Session的Id是:${pageContext.session.id}
    </body>
    </html>

    7.web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
      <display-name>Archetype Created Web Application</display-name>
    
    <!-- 注册针对ServletContext对象进行监听的监听器 -->
       <listener>
           <description>ServletContextListener监听器</description>
           <!--实现了ServletContextListener接口的监听器类 -->
           <listener-class>com.servlet.study.listener.MyServletContextListener</listener-class>
       </listener>
      <!--注册针对HttpSession对象进行监听的监听器-->
      <listener>
        <description>HttpSessionListener监听器</description>
        <listener-class>com.servlet.study.listener.MyHttpSessionListener</listener-class>
      </listener>
      <!-- 配置HttpSession对象的销毁时机 -->
      <session-config>
        <!--配置HttpSession对象的1分钟之后销毁 -->
        <session-timeout>1</session-timeout>
      </session-config>
      <!--注册针对ServletRequest对象进行监听的监听器-->
      <listener>
        <description>ServletRequestListener监听器</description>
        <listener-class>com.servlet.study.listener.MyServletRequestListener</listener-class>
      </listener>
    
      <welcome-file-list>
             <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
    
    </web-app>

    参考:javaweb学习总结(四十四)——监听器(Listener)学习

  • 相关阅读:
    hdu 5036 概率+bitset
    hdu 5037 周期优化
    hdu 5038 求出现次数最多的grade
    hdu 5040 bfs
    hdu 5045 N个人做M道题的正确率
    hdu 5046 二分+DLX模板
    hdu 5047 大数找规律
    c:set注意事项
    It is indirectly referenced from required .class files(导入项目报错原因与解决方法)
    oracle-01722,函数subtr,instr
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/9525500.html
Copyright © 2011-2022 走看看