JavaWeb学习笔记--Listener
JSP中的监听器
Web程序在服务器运行的过程中,程序内部会发生多事件,如Web应用的启动和停止、Session会话的开始和销毁、用户请求的开始和结束等等。有时程序员需要在这些事件发生的时机执行一些处理,以完成特定的任务(如通过监控Session的开始和结束,可统计网站的在线人数)。事实上,这些事件是可以编码处理的,Servelt API提供了大量的监听器Listener来监听Web程序中发生的这些事件,程序员只要实现恰当的特定的事件监听器,就可以对该事件进行处理。
使用监听器需要两个步骤:
第一,实现特定的Listener类,编写事件处理;
第二,通过web.xml(或者Annotation)配置启用该Listener。
总共有8个Listener接口,分为3类
1. 与ServletContext有关的Listener接口:
ServletContextListener
ServletContextAttributeListener
2. 与HttpSession有关的Listener接口:
HttpSessionListener
HttpSessionAttributeListener
HttpSessionActivationListener
HttpSessionBindingListener
3. 与ServletRequest有关的Listener接口:
ServletRequestListener
ServletRequestAttributeListener
| 监听器接口 | 实现方法 | 事件 | 执行时机 |
| ServletContextListener | contextInitialized() contextDestroyed() |
ServletContextEvent | 加载Web应用时(如启动服务器后),会调用contextInitialized(), 移除Web应用时(服务器停止),会调用contextDestroyed ()方法。 |
| ServletContextAttributeListener | attributeAdded() attributeReplaced() attributeRemoved() |
ServletContextAttributeEvent | 向application设置属性、置换、移除属性时依次调用这 三个方法 |
| HttpSessionListener | sessionCreated() sessionDestroyed () |
HttpSessionEvent | 在HttpSession对象创建和销毁时会依次调用这两个方法 |
| HttpSessionAttributeListener | attributeAdded() attributeReplaced() attributeRemoved() |
HttpSessionBindingEvent | 向Session设置属性、置换、移除属性时依次调用这三个方法 |
| HttpSessionActivationListener | sessionDidActivate() sessionWillPassivate() |
HttpSessionEvent | 当session对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以,这两个方法分别执行于Activeate之后与Passivate之前 |
| HttpSessionBindingListener | valueBound() valueUnbound() |
HttpSessionBindingEvent |
在HttpServletRequest对象创建和销毁时会依次调用这两个方法 |
| ServletRequestListener | requestInitialized() requestDestroyed() |
RequestEvent | 向request对象设置属性、置换、移除属性时依次调用这三个方法 |
| ServletRequestAttributeListener | attributeAdded() attributeReplaced() attributeRemoved() |
ServletRequestAttributeEvent | 其实例被加入至session对象的属性中,则调valueBound(), 若从session对象的属性中移除,则调valueUnbound(); 实现 HttpSessionBindingListener接口的类无需在web.xml配置 |
例1:ServletContextAttributeListener接口(需要实现三个方法)
MyServletContextAttributeListener.java
public class MyServletContextAttributeListener implements ServletContextAttributeListener {public void attributeAdded(ServletContextAttributeEvent arg0) {
// application范围属性添加时调用
System.out.println("添加application范围属性,属性名"+arg0.getName()+",属性值"+arg0.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent arg0) {
// application范围属性替换时调用
System.out.println("替换application范围属性,属性名"+arg0.getName()+",替换后的属性值"+arg0.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent arg0) {
// application范围属性移除时调用
System.out.println("移除application范围属性,属性名"+arg0.getName());
}
}
web.xml
<listener>
<description>MyServletContextAttributeListener</description>
<listener-class>com.servlet.MyServletContextAttributeListener</listener-class>
</listener>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>设置application范围属性</title>
</head>
<body>
<%
application.setAttribute("name", "James");
application.setAttribute("name", "123");
application.removeAttribute("name");
%>
</body>
</html>
控制台输出:
添加application范围属性,属性名name,属性值James
替换application范围属性,属性名name,替换后的属性值James
移除application范围属性,属性名name
例2:HttpSession Listener
1.HttpSessionListener接口,负责监听session的创建与销毁
MyHttpSessionListener.java 需要实现两个函数
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {//session启动时调用
public void sessionCreated(HttpSessionEvent arg0) {
HttpSession session= arg0.getSession();
System.out.println("创建session,ID为"+session.getId());
}
//session销毁时调用
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("销毁session");
}
}
HttpSessionAttributeListener接口 负责监听session内属性的创建、修改、删除
MyHttpSessionAttributeListener.java
@WebListener
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("移除session范围属性");
}
public void attributeAdded(HttpSessionBindingEvent arg0) {
HttpSession session = arg0.getSession();
System.out.println("添加session范围属性"+session.getAttribute("name"));
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
HttpSession session = arg0.getSession();
System.out.println("修改session范围属性"+session.getAttribute("name"));
} }
web.xml,设定Listener的映射
<listener>
<description>MyHttpSessionListener</description>
<listener-class>com.servlet.MyHttpSessionListener</listener-class>
</listener>
<listener>
<description>MyHttpSessionAttributeListener</description>
<listener-class>com.servlet.MyHttpSessionAttributeListener</listener-class>
</listener>
HttpSession.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<head>
<title>关于session</title>
</head>
<body>
<%
session.setAttribute("name", "张三");
session.setAttribute("name", "李四");
session.removeAttribute("name");
session.invalidate();
%>
</body>
</html>
控制台显示:
添加session范围属性张三
修改session范围属性李四
移除session范围属性
销毁session
JavaWeb学习笔记--Listener的更多相关文章
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- 【JAVAWEB学习笔记】06_jQuery基础
接05的学习笔记. 四.使用JQ完成省市二级联动 1.需求分析 使用jquery完成省市二级联动 2.技术分析 2.1数组的遍历操作 方式一: $(function(){ // 全选/ 全不选 $(& ...
- javaweb学习笔记(二)
一.javaweb学习是所需要的细节 1.Cookie的注意点 ① Cookie一旦创建,它的名称就不能更改,Cookie的值可以为任意值,创建后允许被修改. ② 关于Cookie中的setMaxAg ...
- Javaweb学习笔记(一)
一.javaweb学习是所需要的细节 1.发送响应头相关的方法 1).addHeader()与setHeader()都是设置HTTP协议的响应头字段,区别是addHeader()方法可以增加同名的响应 ...
- JavaWeb学习笔记(二十一)—— 监听器Listener
一.监听器概述 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对 ...
- JavaWeb学习笔记之Servlet(一)
1. 引子: 当我们开始进入JavaWeb开发的学习时,我们就必须要和Servlet和HTTP这两个词进行打交道了,尤其是Servlet.即使到了后面使用JSP (我们知道JSP其本身就是一个Serv ...
- Javaweb学习笔记——上传下载文件
一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...
- 【JAVAWEB学习笔记】13_servlet
JavaWeb核心之Servlet 教学目标 案例一.完成用户登录功能 案例二.记录成功登录系统的人次 一.Servlet简介 1.什么是Servlet Servlet 运行在服务端的Java小程序, ...
随机推荐
- 文本阴影:text-shadow
例如: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- intrins.h 里面的函数都有什么,功能是什么?
是c51中的intrins.h库 _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ ...
- XML在数据传输哪些方面会比JSON有优势,在哪些领域更加适合?
XML 跟 JSON 的圣战,或许会成为自 vim/emacs 圣战,cli/gui 圣战等等圣战以来的又一个圣战,而所有的圣战大抵都不会有结果,因为每方都有各自的道理,谁都不服谁. 在我看来,XML ...
- Android 5.0 之SwipeRefreshLayout
金田 下拉刷新是一种比较常用的效果,Android 5.0之前官方并未提供类似的控件,App中主要是用的第三方库,例如PullToRefresh,ActionBar-PullToRefresh等.刚好 ...
- Django中生成PDF(一)
Django中生成PDF(一) 需求描述: 某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...
- Shell中特殊的变量
$表示当前的进程,当使用echo $$是会输出当前shell的pid echo $$ 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例 ...
- [实战]记一次PUT方法拿下网站shell
第一次用方法拿shell,之前遇到的都是没有写入权限的. 站太辣鸡,纯粹练手,就不打码了. 此次实战会用到的HTTP请求方法: OPTIONS,PUT,MOVE/COPPY * 战前准备 0x01 什 ...
- spring整合springMVC、mybatis、hibernate、mongodb框架
开发环境 eclipse Mars 4.5 JDK 1.7 框架 spring 4.0.5 mybatis 3.2.7 hibernate 4.3.6 mongodb 1.7 数据库 MySQL 5. ...
- Jsp中response对象的所有属性
所属接口:javax.servlet.http.HttpServletResponse,其父接口是ServletResponse,而且ServletResponse也现在只有唯一一个HttpServl ...
- 关于IE7 兼容问题
关于a标签的写法(目前测试只针对IE7,IE8及谷歌浏览器): <a onclick = 方法名(参数);></a> 此写法在 IE8以上及谷歌浏览器使用都没有问题,但在I ...