1、
什么是监听器
针对于整个Web
环境的监听,主要有三大类:
ServletContext:对
Servlet
上下文监听
Session:对
Session
监听
Request:对
Request
监听
2、
ServletContext,相当于
JSP
的
application
对象
定义了一个Servlet
的环境对象,通过这个对象,
Servlet
引擎向
Servlet
提供环境信息。 一个
Servlet
的环境对象必须至少与它所驻留的主机是一一对应的。在一个处理多个虚拟主 机的
Servlet
引擎中(例如,使用了
HTTP1.1
的主机头域),每一个虚拟主机必须被视为一 个单独的环境。此外,
Servlet
引擎还可以创建对应于一组
Servlet
的环境对象
。
3、
实现监听就是实现一系列的接口,对ServletContext
的监听,就是对容器的初始化、销毁、属性的操作进行监听,需要实现以下两个接口:
ServletContextListener
和
ServletContextAttributeListener
。
ServletContextListener
接口实现对整个Servlet
的启动和销毁监听,有下面两个方法:
public void
contextInitialized
(
ServletContextEvent
sce)
:监听
servlet初始化,在服务器启动时
public void
contextDestroyed
(
ServletContextEvent
sce)
:监听
servlet销毁,在服务器销毁时
ServletContextEvent
事件,取得一个
ServletContext(application)对象:
public ServletContext getServletContext();
ServletContextAttributeListener
接口对
Servlet上下文属性进行监听,有三个方法:
attributeAdded
(
ServletContextAttributeEvent
scab)
:增加属性,
setAttribute
attributeRemoved
(
ServletContextAttributeEvent
scab)
:删除属性,
removeAttribute
attributeReplaced
(
ServletContextAttributeEvent
scab)
:替换属性,第二次设置同一属性
ServletContextAttributeEvent
事件,取得所设置属性的名称和值:
public String
getName
()
:得到属性的名称
public String
getValue
()
:得到属性的值
4、
对ServletContext
监听例子
package com.xxx.xxx.xxx;
import javax.servlet.* ;
public class ServletContextDemo
implements ServletContextListener,ServletContextAttributeListener{
private ServletContext application = null ;
// 实现方法
public void contextInitialized(ServletContextEvent sce){
this.application = sce.getServletContext() ;
System.out.println("** 上下文初始化
...") ;
System.out.println("** 当前虚拟目录的绝对路径:
"+this.application.getRealPath("/")) ;
}
public void contextDestroyed(ServletContextEvent sce){
System.out.println("** 上下文销毁
...") ;
}
public void (ServletContextAttributeEvent scab){
System.out.println("** 增加属性:
"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeRemoved(ServletContextAttributeEvent scab){
System.out.println("** 删除属性:
"+scab.getName()+" --> "+scab.getValue()) ;
}
public void attributeReplaced(ServletContextAttributeEvent scab){
System.out.println("** 替换属性:
"+scab.getName()+" --> "+scab.getValue()) ;
}
}
在web.xml
文件中注册监听器
<listener>
<listener-class>com.xxx.xxx.xxx</listener-class>
</listener>
在容器启动时执行contextInitialized()
方法,容器销毁时执行
contextDestroyed()
方法,有属性的变动时执行
attributeAdded
、
attributeRemoved
、
attributeReplaced
这几个方法,该监听器是针对整个
ServletContext
上下文的,相当于
application
,而不是针对某个用户的。
5、
对session
的监听
监听session
的创建、销毁、属性操作等。
Session
属性
http
协议下的内容,所以需要实现的两个接口都在
javax.servlet.http
包下:
HttpSessionListener
对session
的整体状况进行监听,需要重写下面两个方法:
sessionCreated
(
HttpSessionEvent
se)
:session
创建
sessionDestroyed
(
HttpSessionEvent
se)
:session
销毁
HttpSessionEvent
事件,getSession()
方法取得当前
session
HttpSessionAttributeListener
,对session
属性的监听,重写下面三个方法:
attributeAdded
(
HttpSessionBindingEvent
se)
:新增属性
attributeRemoved
(
HttpSessionBindingEvent
se)
:删除属性
attributeReplaced
(
HttpSessionBindingEvent
se)
:替换属性
HttpSessionBindingEvent
事件,有三个方法:
String
getName
()
:取得属性名
HttpSession
getSession
()
:取得当前session
Object
getValue
()
:取得属性值
6、
session监听例子
package
com.xxx.xxx.xxx
;
import javax.servlet.http.* ;
public class HttpSessionDemo implements HttpSessionListener,HttpSessionAttributeListener{
private HttpSession session ;
// 实现方法
public void sessionCreated(HttpSessionEvent se){
this.session = se.getSession() ;
System.out.println("** Session 创建
....") ;
System.out.println("** SessionID --> "+this.session.getId()) ;
}
public void sessionDestroyed(HttpSessionEvent se){
System.out.println("** Session 销毁
....") ;
}
public void attributeAdded(HttpSessionBindingEvent se){
System.out.println("** Session 增加属性
:"+se.getName()+" --> "+se.getValue()) ;
}
public void attributeRemoved(HttpSessionBindingEvent se){
System.out.println("** Session 删除属性
:"+se.getName()+" --> "+se.getValue()) ;
}
public void attributeReplaced(HttpSessionBindingEvent se){
System.out.println("** Session 替换属性
:"+se.getName()+" --> "+se.getValue()) ;
}
}
在web.xml
文件中注册监听器
<listener>
<listener-class>
com.xxx.xxx.xxx
</listener-class>
</listener>
7、
session的销毁
有两种方式能让session
销毁,一种是
session
超时自动销毁,可以在
web.xml
文件中配置超时时间:
<session-config>
<session-timeout>10</session-timeout><!--分钟
-->
</session-config>
另一种是调用session
的
invalidate()
方法使其销毁。
相关推荐
当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。 例如:创建一个“人”类Class Person 人拥有吃的方法public void eat(){},我们的目的是,在这个人吃之前要提醒他洗手,所以我们要...
配置Oracle监听器 配置Oracle监听器
主要介绍了Java设计模式之监听器模式,结合实例形式较为详细的分析了java设计模式中监听器模式的概念、原理及相关实现与使用技巧,需要的朋友可以参考下
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 ...
基于 RBAC与监听器机制设计作业管理软件
java一个监听器的例子
主要给大家介绍了关于java监听器实现和原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
2. 对某个源注册一个监听器,此源便成为一个事件源,当事件源上发生某一个动作时,监听器的某个方法将会被调用执行,在执行事件监听器的这个方法时,同时会把事件监听对象传递给此方法,开发人员在监听器中可以拿到...
android 外部类作为事件监听器类 ,外部类形式的事件监听器不能自由访问创建GUI界面
下图所示的驻波比监听器电路是专门为盲人业余无线电爱好者设计的,其目的是让盲人能够根据声音来检查传输线的驻波比,并尽可能把源阻抗与负载阻抗调整到完全匹配。图中的黑粗线是两条6*70mm的薄金属条彼此相距1.5mm...
教程名称: 【动力节点】Javaweb开发视频教程之监听器 动力节点推出的Java视频教程包含两大部分内容:第一部分为监听器相关设计模式的详解。其中包括观察者设计模式、监听器设计模式。第二部分为监听器用法。详细...
java字符编码监听器
JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与...JavaWeb13-过滤器与监听器.rar
Java监听器添加 四种监听器 内部 外部 内部匿名 自身
Web页面的过滤与监听 了解Filter基本概念和适用场合 掌握使用Filter的基本步骤 会定义和使用Filter 掌握全局对象监听器的使用和应用 掌握会话对象监听器的使用和应用
web监听器代码web监听器代码web监听器代码web监听器代码web监听器代码web监听器代码
用监听器实现在线人数统计,过滤器实现页面自动编码 非法字符过滤
过滤器和监听器
网络数据抓包器,汉化版。简单实用,功能强大!网络数据监听器
servelt 监听器 class MyRequest extends HttpServletRequestWrapper { public MyRequest(HttpServletRequest request) { super(request); } public String MyEncoding(String value) { String value...