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小程序, ...
随机推荐
- Basic Printing Architecture
https://blogs.technet.microsoft.com/askperf/2007/06/19/basic-printing-architecture/ Printer sharing, ...
- java日期int和String互转
/** * 时间unix转换 * @param timestampString * @return */ public static String TimeStampDate(String times ...
- 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar
原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...
- Windows服务器Pyton辅助运维--02.远程重启IIS服务器
Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u 运维服务器: Pyth ...
- GitHub托管BootStrap资源汇总
MESSENGER替换alert()消息和其他用户交互通知. JQUERY.TOCIFY.JS可以用Bootstrap或jQueryUI主题的Jquery表格组件. BOOTSTRAP-PROMPTS ...
- ContextLoaderListener初始化的前后文和DispatcherServlet初始化的上下文关系
ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层.Service层Bean: DispatcherServlet ...
- (七)《Java编程思想》——多态的缺陷
1.不能“覆盖”私有方法 package chapter8; /** * 不能"覆盖"私有方法 */ public class PrivateOverride { private ...
- 迟到的tkinter---学校选课刷屏器
今儿上午选修了一门<结构分析与程序设计>,发现是用VB编写结构力学受力图示的一门课,VB高中学过,但是基本已经忘得差不多了,今儿老师让用VB编写了一个计算器,匆忙的百度了一下后就完成了觉得 ...
- DataGrid简单数据绑定实例2
1.Image列显示: 后台绑定: //获取文件夹下的图片 string path = @"K:\Picture\jpg"; private void Button_Click(o ...
- ReportViewer导出功能筛选
ReportViewer只能导出Excel,把导出Word和PDF功能去掉 <rsweb:ReportViewer ID="ReportViewer1" runat=&quo ...