zoukankan      html  css  js  c++  java
  • JavaWeb系列之:监听器

    一,监听器定义

    指专门用于对其他对象身上发生的 事件 或 状态改变 进行监听和相应处理的对象,当被监视对象发生变化时,立即采取相应的行动。

    Web监听器可以监听客户端的请求,服务端的操作。可以监听的对象有:

    ServletContex ---->作用域:application(上下文对象,由容器创建和初始化,范围是整个应用,并且这个应用只有一个application存在,当web服              务器关闭时,就会把application对象销毁)。

    HttpSession ------>作用域:session(session是一种保存上下文的机制,针对每一个会话。放在服务器端通过sessionId来区分的,当浏览器和服              务器结束会话后,会把session销毁)

    ServletRequest ----->作用域:request(request对象是当客户发送请求时,容器就会创建一个ServletRequest对象,用来封装请求数据,同时会              创建一个ServletResponse对象来封装响应数据。在访问结束请求之后,request对象就会被销毁)

    Web监听器主要用来监听这三个对象的创建,销毁,以及对象的属性的变化。

    Web监听器总结:

    web监听器是Servlet规范中定义的一种特殊类

    用来监听ServletContext,HttpSession,ServletRequest等域对象的创建和销毁事件

    用来监听域对象的属性发生修改的事件

    可以在事件发生之前,发生之后做一些必要的处理

    二,用途

    1,统计在线人数和在线用户

    2,系统启动时加载初始化信息(包括缓存,一些定时器信息,数据库连接等)

    3,访问网站访问量

    4,和Spring结合

    三,实现一个监听器

    1,步骤:

    创建一个类,实现监听器接口

    配置web.xml进行注册

    2,代码:

    public class FirstListener implements ServletContextListener {
    
        public void contextInitialized(ServletContextEvent servletcontextevent) {
            System.out.println("contextInitialized  ");
        }
    
        public void contextDestroyed(ServletContextEvent servletcontextevent) {
            System.out.println("contextDestroyed");
        }
    
    }

    web.xml配置监听器

    <listener>
      <listener-class>com.iamazing.listener.FirstListener</listener-class>
    </listener>

    web容器启动时执行:contextInitialized(ServletContextEvent servletcontextevent)

    web容器销毁时执行:contextDestroyed(ServletContextEvent servletcontextevent)

    四,监听器的启动顺序

    一个web.xml下有多个监听器时,注册顺序和加载顺序是按照web.xml中的配置顺序。

    监听器,过滤器,Servlet的加载(启动)顺序:  监听器  》 过滤器 》 Servlet

    五,监听器的分类

    1,按监听的对象划分:

    用于监听应用程序环境对象(ServletContext)的事件监听器

    用于监听用户会话对象(HttpSession)的事件监听器

    用于监听请求消息对象(ServletRequest)的事件监听器

    2,按监听的事件划分

    监听域对象自身的创建和销毁的事件监听器

    监听域对象中的属性的增加和删除的事件监听器

    监听绑定到HttpSession域对象中的某个对象的状态的事件监听器

    六,监听域对象自身的创建和销毁的事件监听器

    1.1,域对象有三个:ServletContext,HttpSession,ServletRequest。

    在Servlet规范中,定义了三个接口,用来监听这三个域对象的创建事件和销毁事件

    ServletContextListener, HttpSessionListener, ServletRequestListener

    2,ServletContext

    一个web项目中可以定义多个ServletContextListener,但是只有一个ServletContext对象。

    2.1,在ServletContextListener中有两个事件处理方法:

    contextInitialized方法:---->ServletContext创建时调用

      public void contextInitialized(ServletContextEvent sce):ServletContextEvent对象可以获取ServletContext对象,初始化的参数

    ContextDestoryed方法:----->ServletContex销毁时调用

      public void contextDestoryed(ServletContextEvent sce)

    2.2,主要用途

    定时器

    全局属性对象(比如:创建数据库连接)

    2.3,代码:

    public class FirstListener implements ServletContextListener {
    
        public void contextInitialized(ServletContextEvent servletcontextevent) {
            String initParam = servletcontextevent.getServletContext().getInitParameter("initParam");
            System.out.println("contextInitialized : initParam = "+initParam);
        }
    
        public void contextDestroyed(ServletContextEvent servletcontextevent) {
            System.out.println("contextDestroyed");
        }
    
    }
    <context-param>
      <param-name>initParam</param-name>
      <param-value>hello</param-value>
     </context-param>
     <listener>
      <listener-class>com.amazing.listener.FirstListener</listener-class>
     </listener>

    3,HttpSession

    一个web应用中可以有多个HttpSession对象

    3.1,HttpSessionListener有两个处理事件方法

    sessionCreated方法:------>session创建时调用

      public void sessionCreated(HttpSessionEvent se)

    sessionDestoryed方法:----->sesssion销毁时调用

      public void sessionDestoryed(HttpSessionEvent se)

    3.2,用途、

    统计在线人数

    记录访问日志

    3.3,代码:

    public class MyHttpSessionListener implements HttpSessionListener {
    
        public void sessionCreated(HttpSessionEvent httpsessionevent) {
            System.out.println("sessionCreated");
        }
    
        public void sessionDestroyed(HttpSessionEvent httpsessionevent) {
            System.out.println("sessionDestroyed");
        }
    
    }

    在web.xml中注册监听器

    <listener>
      <listener-class>com.imooc.listener.MyHttpSessionListener</listener-class>
     </listener>

    配置session失效时间:过了失效时间清除sesssion(注意:这里不一定整好时30分钟,因为并没有一个定时器去实现它,只是大致时间)

    <session-config>
      <session-timeout>30</session-timeout>
     </session-config>

    4,ServletRequest

    请求开始创建对象,请求结束销毁对象

    4.1,两个事件处理方法

      requestInitialized方法 ---->request创建时调用

      requestDestoryed方法 ----->request销毁时调用

    4.2,用途

    读取参数

    记录访问历史(访问了哪些路径)

    4.3,代码

    public class MyServletRequestListener implements ServletRequestListener {
    
        public void requestDestroyed(ServletRequestEvent servletrequestevent) {
            System.out.println("requestDestroyed ");
        }
    
        public void requestInitialized(ServletRequestEvent servletrequestevent) {
            String name = servletrequestevent.getServletRequest().getParameter("name");
            System.out.println("requestInitialized name:"+name);
        }
    
    }
    <listener>
      <listener-class>com.imooc.listener.MyServletRequestListener</listener-class>
     </listener>

     七,监听域对象中的属性的增加和删除的事件监听器

    ServletContextAttributeListener, HttpSessionAttributeListener, ServletRequestAttributeListener。

    他们三个对象中的三个方法都是一样的:

    attributeAdded:

    attributeRemoved:

    attributeReplaced:

  • 相关阅读:
    Linux基础知识[1]【ACL权限】
    docker 入门学习篇【基本命令与操作】
    centos7.1下 Docker环境搭建
    RHEL6.5下更新python至2.7版本
    Github初学者探索
    vmware下linux虚拟机传文件解决方案之 xftp
    mysql 常用操作命令
    常用DNS记录
    常见网络协议端口号整理
    DNS原理及其解析过程 精彩剖析
  • 原文地址:https://www.cnblogs.com/inspred/p/10872635.html
Copyright © 2011-2022 走看看