zoukankan      html  css  js  c++  java
  • 监听器随笔

    web监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext,HttpSession,ServletRequest等域对象的创建、销毁、以及属性的变化等,可以在事件发生前、发生后进行一些处理。

    监听器的用途

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

    2、系统加载时进行信息的初始化工作

    3、统计网站的访问量

    4、跟Spring结合

    监听器的分类

    按监听的对象划分,可以分为监听

    1、ServletContext对象

    2、HttpSession对象

    3、ServletRequest对象

    按监听的事件划分

    1、域对象自身的创建和销毁

    2、域对象中属性的创建和消除

    3、绑定到session中的某个对象的状态

    MyServletContextListener是监听者类。这个类实现了ServletContextListener:

     1 package com.moonlit;
     2 
     3 import javax.servlet.ServletContext;
     4 import javax.servlet.ServletContextEvent;
     5 import javax.servlet.ServletContextListener;
     6 
     7 public class MyServletContextListener implements ServletContextListener {
     8 
     9     @Override
    10     public void contextInitialized(ServletContextEvent event) {
    11         ServletContext sc = event.getServletContext();
    12         String dogBreed = sc.getInitParameter("breed");
    13         Dog d = new Dog(dogBreed);
    14         sc.setAttribute("dog", d);
    15     }
    16     
    17     @Override
    18     public void contextDestroyed(ServletContextEvent event) {
    19         // do nothing here
    20     }
    21 }

    我们需要建立一个属性类Dog。DOg只是一个普通的Java类,它的任务是作为一个属性值,由ServletContextListener实例化,并设置在ServletContext中,一遍servlet获取:

     1 package com.moonlit;
     2 
     3 public class Dog {
     4     private String breed;
     5     
     6     public Dog(String breed) {
     7         this.breed = breed;
     8     }
     9     
    10     public String getBreed() {
    11         return breed;
    12     }
    13 }

    ListenerTest类是一个Servlet类,它的任务是验证监听者的工作。为此这个Servlet会从上下文得到Dog属性,调用Dog的getBreed(),把结果打印到响应(使我们能在浏览器中看到):

     1 package com.moonlit;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 @SuppressWarnings("serial")
    12 public class ListenerTester extends HttpServlet {
    13     @Override
    14     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    15         resp.setContentType("text/html");
    16         PrintWriter out = resp.getWriter();
    17         out.println("test context attributes set by listener<br>");
    18         out.println("<br>");
    19         Dog dog = (Dog) getServletContext().getAttribute("dog");
    20         out.println("Dog's breed is : " + dog == null ? "no " : dog.getBreed());
    21     }
    22 }

    监听器的编写步骤:

    a、编写一个监听器类去实现监听器接口

    b、覆盖监听器的方法(实现接口之后因为没没有重写方法,会出现异常,点击之后会自动实现两种方法的)

    c、需要在web.xml中进行配置<listener>定义权限类名</listener>

    监听对象的方法中的参数,就是连接监听对象的:

    sce.getServletContext();

    下面这个方法也是获得监听对象的方法,不知过是获取通用的方法,而上面的是指定的方法。

    sce.getSource();

    ServletContextListener监听器的主要作用:

    a、初始化工作:初始化对象  初始化数据---加载数据库驱动  连接池的初始化

    b、加载一些初始化的配置文件----spring的配置文件

    c、任务调度----定时器  Timer = new Timer();定时器创建的方法

    监听器分类作用:

    HttpSessionListenerSercletRequestListener

    监听Session域中的监听创建与销毁

    ServletRequest域创建域销毁的监听器ServletRequestListener

    这个没什么用的 老师都没有讲解

    三个域对象内属性的变化,貌似也是一种监听器

    域对象通用的方法:★记住是域对象通用的三个方法

    serAttribute(name,value)

    getAttribute(name)

    removeAttribute(name)

    session中的绑定的对象相关的监听器(对象感知监听器)

    1、即将要被绑定到session中的对象有几种状态

    绑定状态:就一个对象被放到session域中(同一个监听器HttpSessionBindingLiseener

    解绑状态:就是这这个对象从session域中移除了(同一个监听器HttpSessionBindingLiseener

    HttpSessionBindingLiseener并不是注册给session的,而是给即将要绑定到session域中的对象的

    -------------------------------------------------------------------------------------

    钝化状态:是将session内存中的对象持久化(序列化)到磁盘

    活化状态:就是将磁盘上的对象再次恢复到session内存中

    钝化:把内存中的对象弄到硬盘上,叫钝化。

    活化:把对象从磁盘中弄到内存中,叫活化,这两个的功能可以优化内存。

  • 相关阅读:
    Oracle 跨库查询表数据(不同的数据库间建立连接)
    Oracle 跨库查询表数据(不同的数据库间建立连接)
    Win10“启动”文件夹在哪里?如何打开Win10启动文件夹?
    常用[js,css,jquery,html]
    备忘
    常用网站
    常用SQL[ORACLE]
    基于 Promise 的 HTTP 请求客户端 axios
    CSS中字体响应式的设置
    HTML5 History API让ajax能回退到上一页
  • 原文地址:https://www.cnblogs.com/tidhy/p/6658149.html
Copyright © 2011-2022 走看看