JavaWeb——监听器
2018-03-06 13:51
661 查看
一、监听器概述
1、它是一个接口,内容由我们来实现2、它需要注册,例如注册在按钮上
3、监听器中的方法会在特殊事件发生时被调用
我们用一个简单的例子来说明监听器的工作原理:
在监听器中有三个名词:事件源,事件,监听器
比如在一个酒店里发生了打架事件,警察来捉人。
事件源:打架的人
事件:打架
监听器:警察
监听器中的方法:捉人(一个监听器可以有多个方法,对不同的事件调用不同的方法)
二、JavaWeb中的监听器
事件源及其对应的监听:ServletContext:
(1)生命周期监听:
ServletContextListener,它有两个方法,一个是在出生时调用,一个在死亡是调用
(2)属性监听:
ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,一个在移除属性时调用
HttpSession
(1)生命周期监听:
HttpSessionListener,它有两个方法,一个是在出生时调用,一个在死亡是调用
(2)属性监听:
HttpSessionAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,一个在移除属性时调用
ServletRequest
(1)生命周期监听:
ServletRequestListener,它有两个方法,一个是在出生时调用,一个在死亡是调用
(2)属性监听:
ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,一个在移除属性时调用
生命周期监听器举例:这里的例子是
ServletContextListener,因为
ServleContext在服务器开启时创建,在服务器关闭时销毁
package com.jiayifan; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; public class AListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent sce) { System.out.println("哈哈,我离开了!!!!"); } public void contextInitialized(ServletContextEvent sce) { System.out.println("哈哈,我来了!!!!!"); } }
在web.xml中配置监听器:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Dome1</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.jiayifan.AListener</listener-class> </listener> </web-app>
web.xml的配置就省略了,jsp页面的代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% application.setAttribute("lalala", "hahaha"); %> </body> </
程序运行结果:
事件对象:
ServletContextEvent
HttpSeesion
ServletRequestEvent
我们可以通过事件对象获取事件源,比如我们可以通过
ServletContextEvent来获取
ServletContext对象。
属性监听器示例:
package com.jiayifan; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.annotation.WebListener; public class BListener implements ServletContextAttributeListener { //添加属性时调用 public void attributeAdded(ServletContextAttributeEvent scae) { System.out.println("你添加了一个名字为" + scae.getName() + "值为" + scae.getValue() + "的属性"); } //移除属性时调用 public void attributeRemoved(ServletContextAttributeEvent scae) { } //修改属性时调用 public void attributeReplaced(ServletContextAttributeEvent scae) { } }
程序运行截图:
上面列举的是三大域的监听器,而JavaWeb中有8个监听器,上面已经列举了其中的6个,因为上面的6个比较简单,而且基本的用法也极其类似,所以放在一块讲解,下面再来介绍一下其余的两个。
三、感知监听(与HttpSession相关)
1、这个监听器添加到JavaBean上2、这个监听器不需要在web.xml中配置
HttpSessionBindingListener这个监听器是放在JavaBean上的,它将在该JavaBean放入HttpSeeion中时调用方法,或者在被移除HttpSession时调用方法
程序示例:
package com.jiayifan; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; public class User implements HttpSessionBindingListener{ private String name; private String password; public User(String name, String password) { super(); this.name = name; this.password = password; } public User() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public void valueBound(HttpSessionBindingEvent event) { System.out.println("啊,session添加了我"); } @Override public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("哇,session放弃了我"); } }
jsp页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" c9dd pageEncoding="UTF-8" import="com.jiayifan.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% session.setAttribute("user", new User()); session.removeAttribute("user"); %> </body> </html>
程序运行截图:
四、钝化活化监听器(HttpSessionActivationListener)
1、这个监听器添加到JavaBean上2、这个监听器不需要在web.xml中配置
因为这个监听器并不常用,并且不好演示,所以这里只讲一下概念。
session的序列化和反序列化:
当我们关闭服务器时,服务器会将session保存到本地,这种操作就是session的序列化,在服务器又开启时,服务器又将session从本地读取出来,这样的操作就是session的反序列化。
session的钝化和活化:
当服务器的访问量很高时,如果有session很长时间都没有被访问,服务器就会把session保存到本地,然后把内存中的session移除来扩大内存,这就是session的钝化,当用户又访问该session时,服务器又将session从本地读取到内存中,这是session的活化。
相关文章推荐
- JavaWeb中的监听器
- javaWeb之监听器的分类2
- java WEB开发:过滤器、监听器、拦截器的区别
- JavaWeb之Listener监听器
- javaWeb之监听器的分类3
- JavaWeb中监听器+过滤器+拦截器区别
- 超全面的JavaWeb笔记day20<监听器&国际化>
- javaweb之过滤器监听器
- Java Web 第六天 作用域及监听器
- java web 监听器详解
- java web 监听器listener
- JavaWEB开发-Servlet事件监听器
- 【JavaWeb】(8)监听器
- javaweb 监听器
- java-WEB中的监听器Lisener
- JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用
- Java Web开发--------监听器
- java web开发(十二)监听器
- JAVA Web开发技术应用——监听器
- 传智播客java web 学习,Servlet事件监听器