java中监听是什么_Java中的监听器

servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习。

监听器就是监听某个对象的状态变化的技术。监听器包括事件源,监听器,注册监听器以及响应行为四个部分。

事件源即被监听的对象。

监听器是监听事件源对象的状态变化。

注册监听器即将监听器与事件源关联起来。

响应行为即监听到事件源所触发的动作。

监听器按照不同的划分方式可以分为多种

1,按照监听的对象不同可分为HttpRequest域,HttpSession域和ServletContext域。

2,按照监听的状态可分为监听域对象的创建与销毁,属性状态的变化。(这两点可归纳为监听三大域对象的创建与销毁及其属性的状态变化)

3,其它监听器

ServletContext域

HttpSession域

ServletRequest域

域对象的创建与销毁

ServletContextListener

HttpSessionListener

ServletRequestListener

域对象属性状态的变化

ServletContextAttributeListener

HttpSessionAttributeListener

ServletRequestAttributeListener

一,三大域对象的监听器

此三大域对象的监听器的使用方法:

创建类实现监听器接口

实现接口中监听的方法

注册监听器即在配置文件中把监听器也事件源关联起来

1,ServletContext域对象的监听器

A,ServletContextListener监听器

此监听器主要用来监听ServletContextListener的创建与销毁即服务器的创建与销毁,它的主要作用是初始化对象例如加载数据库驱动,连接池的初始化等;加载一些初始化的配置文件如spring的一些内容等;任务调度,如定时器等

下面演示一下此监听器的用法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.zw.listener;2

3 importjavax.servlet.ServletContextEvent;4 importjavax.servlet.ServletContextListener;5

6 public class MyServletContextListener implementsServletContextListener {7

8 @Override9 public voidcontextDestroyed(ServletContextEvent sce) {10 System.out.println("ServletContext被创建了");11 }12

13 @Override14 public voidcontextInitialized(ServletContextEvent sce) {15 System.out.println("ServletContext被销毁了");16 }17

18 }

创建监听器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns="http://java.sun.com/xml/ns/javaee"

4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

5 id="WebApp_ID" version="2.5">

6 ListenerDemo

7

8 index.html

9 index.htm

10 index.jsp

11 default.html

12 default.htm

13 default.jsp

14

15

16 com.zw.listener.MyServletContextListener

17

18

注册监听器

B,ServletContextAttributeListener监听器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.zw.listener;2

3 importjavax.servlet.ServletContextAttributeEvent;4 importjavax.servlet.ServletContextAttributeListener;5

6 public class MyServletContextAttributeListener implementsServletContextAttributeListener {7

8 @Override9 public voidattributeAdded(ServletContextAttributeEvent scae) {10 System.out.println(scae.getServletContext().getServletContextName() + "被添加了属性");11 }12

13 @Override14 public voidattributeRemoved(ServletContextAttributeEvent scae) {15 System.out.println(scae.getServletContext().getServletContextName() + "被移除了属性");16 }17

18 @Override19 public voidattributeReplaced(ServletContextAttributeEvent scae) {20 System.out.println(scae.getServletContext().getServletContextName() + "被修改了属性");21 }22

23 }

创建监听器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 xmlns="http://java.sun.com/xml/ns/javaee"

4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

5 id="WebApp_ID" version="2.5">

6 ListenerDemo

7

8 index.html

9 index.htm

10 index.jsp

11 default.html

12 default.htm

13 default.jsp

14

15

16 com.zw.listener.MyServletContextListener

17

18

19 com.zw.listener.MyServletContextAttributeListener

20

21

22 servletDemo1

23 com.zw.servlet.ServletDemo

24

25

26 servletDemo1

27 /servlet1

28

29

注册监听器

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.zw.servlet;2

3 importjava.io.IOException;4

5 importjavax.servlet.ServletContext;6 importjavax.servlet.ServletException;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10

11 public class ServletDemo extendsHttpServlet {12

13 @Override14 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {15 ServletContext servletContext =req.getServletContext();16 servletContext.setAttribute("name", "张三");17 servletContext.setAttribute("name", "李四");18 servletContext.removeAttribute("name");19 }20

21 @Override22 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {23

24 doGet(req, resp);25 }26

27 }

为ServletContext改变属性状态

另外两个监听对象属性状态的监听器的实现方式与此相同,以下不再演示

2,HttpSession域对象的监听器

HttpSessioinListener监听器用来监听Session的创建与销毁,其操作方法是实现此接口然后实现其中的方法,注册监听器当访问一个JSP页面时有Session被创建,此监听器内创建Session的方法被调用;当Session过期或被销毁则此监听器Sessioni销毁的方法被调用。

3,ServletRequest域对象的监听器

ServletRequestListener监听器用来监听每一次请求调用请求创建时的方法,当请求结束时,调用销毁的方法;操作方法也是实现此接口,实现其中的方法,然后注册监听器。

二,其它监听器

与Session中绑定的对象相关的监听器(对象感知监听器),该监听器分为两大类,四种状态

A:HttpSessionBindingLinstener此监听器监听将对象绑定到Session中与将对象从Session中解顷的事件

B:HttpSessionActivationLinstener此监听器可将Session中的对象钝化到硬盘上以及从硬盘上读取Session中的对象

这两种监听器不需要注册,直接用一个类实现这两个接口,实现其中的方法即可。

HttpSessionBindingLinstener监听器演示如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.zw.listener;2

3 importjavax.servlet.http.HttpSessionBindingEvent;4 importjavax.servlet.http.HttpSessionBindingListener;5

6 public class Student implementsHttpSessionBindingListener {7

8 @Override9 public voidvalueBound(HttpSessionBindingEvent event) {10

11 System.out.println("Student被绑定到Session中了");12 }13

14 @Override15 public voidvalueUnbound(HttpSessionBindingEvent event) {16 System.out.println("Student从Session中解绑了");17 }18

19 }

HttpSessionBindingLinstener

此时,把Student这个对象添加到Session中便全触被绑定的方法,当remove时便全触发解绑的方法

HttpSessionActivationListener监听器演示如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.zw.listener;2

3 importjava.io.Serializable;4

5 importjavax.servlet.http.HttpSessionActivationListener;6 importjavax.servlet.http.HttpSessionBindingEvent;7 importjavax.servlet.http.HttpSessionBindingListener;8 importjavax.servlet.http.HttpSessionEvent;9

10 public class Student implementsHttpSessionActivationListener, Serializable {11

12 @Override13 public voidsessionDidActivate(HttpSessionEvent se) {14 System.out.println("Student被活化了");15 }16

17 @Override18 public voidsessionWillPassivate(HttpSessionEvent se) {19 System.out.println("Student被钝化了");20 }21

22 }

HttpSessionActivationListener

此监听器监听的对象需要实现序列化接口,因为需要被存储到硬盘上,以上操作当Student被放入Sessioni中,服务器停止时便把Student对象存储到了硬盘上,当重新启动服务器时,Session中的Student便被活化了

但是钝化与活化Session里的对象,不能总停止与启动服务器,可通过配置文件指定Session多久没有操作便钝化,当用户再次使用程序时活化Session,具体操作如下:

1,在META-INF文件下创建context.xml文件,此文件名固定,此文件中的内容如下

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6

7 directory="zw205" />

8

9

context.xml

此时经过一分钟不操作,Session中的对象便被钝化到指定的目录下了,再次操作时是从此文件内拿Session中的对象的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值