监听器随笔

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内存中

 

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

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

 

posted @ 2017-04-02 07:59  tidhy  阅读(112)  评论(0编辑  收藏  举报