Servlet Listener(器)
器的相关概念:
事件:方法调用、属性改变、状态改变等。
事件源:被的对象( 例如:request、session、servletContext)。
器:用于事件源对象 ,事件源对象状态的变化都会触发器。
注册器:将器与事件源进行绑定。
器的分类
Servlet 规范中定义了 8 个器接口,可以用于 ServletContext、HttpSession 和 ServletRequest 对象的生周期和属性变化事件。开发 Servlet 器需要实现相应的器接口并重写接口中的方法。器 Listener 按照的事件划分,可以分为 3 类:
对象创建和销毁的器
对象中属性变更的器
HttpSession 中的对象状态改变的器
对象创建和销毁的器
Servlet 规范定义了 ServletContext、HttpSession、HttpServletRequest 这三个对象创建和销毁事件的器,如下表所示。事件源 | 器 | 器描述 | 创建和销毁方法 | 调用时机 |
|---|---|---|---|---|
ServletContext | ServletContextListener | 用于 ServletContext 对象的创建与销毁过程 | void contextInitialized (ServletContextEvent sce) | 当创建 ServletContext 对象时 |
void contextDestroyed (ServletContextEvent sce) | 当销毁 ServletContext 对象时 | |||
HttpSession | HttpSessionListener | 用于 HttpSession 对象的创建和销毁过程 | void sessionCreated (HttpSessionEvent se) | 当创建 HttpSession 对象时 |
void sessionDestroyed (HttpSessionEvent se) | 当销毁 HttpSession 对象时 | |||
ServletRequest | ServletRequestListener | 用于 ServletRequest 对象的创建和销毁过程 | void requestInitialized (ServletRequestEvent sre) | 当创建 ServletRequest 对象时 |
void requestDestroyed (ServletRequestEvent sre) | 当销毁 ServletRequest 对象时 |
属性变更的器
Servlet 规范定义了 ServletContext、HttpSession、HttpServletRequest 这三个对象中的属性变更事件的器,这三个器接口分别是 ServletContextAttributeListener、HttpSessionAttributeListener 和 ServletRequestAttributeListener。这三个接口中都定义了三个方法,用来处理被对象中属性的增加,删除和替换事件。同一种事件在这三个接口中对应的方法名称完全相同,只是参数类型不同,如下表所示。事件源 | 器 | 器描述 | 方法 | 调用时机 |
|---|---|---|---|---|
ServletContext | ServletContextAttributeListener | 用于 ServletContext 对象的属性新增、移除和替换 | public void attributeAdded (ServletContextAttributeEvent scae) | 当 ServletContext 对象中新增一个属性时 |
public void attributeRemoved (ServletContextAttributeEvent scae) | 当删除 ServletContext 对象中的一个属性时 | |||
public void attributeReplaced (ServletContextAttributeEvent scae) | 当 ServletContext 对象中的某个属性被替换时 | |||
HttpSession | HttpSessionAttributeListener | 用于 HttpSession 对象的属性新增、移除和替换 | public void attributeAdded (HttpSessionBindingEvent he) | 当 HttpSession 对象中新增一个属性时 |
public void attributeRemoved (HttpSessionBindingEvent he) | 当删除 HttpSession 对象中的一个属性时 | |||
public void attributeReplaced (HttpSessionBindingEvent he) | 当 HttpSession 对象中的某个属性被替换时 | |||
HttpServletRequest | ServletRequestAttributeListener | 用于 HttpServletRequest 对象的属性新增、移除和替换 | public void attributeAdded (ServletRequestAttributeEvent srae) | 当 HttpServletRequest 对象中新增一个属性时 |
public void attributeRemoved (ServletRequestAttributeEvent srae) | 当删除 HttpServletRequest 对象中的一个属性时 | |||
public void attributeReplaced (ServletRequestAttributeEvent srae) | 当 HttpServletRequest 对象中的某个属性被替换时 |
Session 中对象状态改变的器
Session 中的对象可以有多种状态:绑定到 Session 中、从 Session 中解除绑定、随 Session 对象持久化到存储设备中(钝化)、随 Session 对象从存储设备中恢复(活化)。Servlet 规范中定义了两个特殊的器接口,用来帮助对象了解自己在 Session 中的状态:HttpSessionBindingListener 接口和 HttpSessionActivationListener 接口 ,实现这两个接口的类不需要进行注册。
事件源 | 器 | 器描述 | 方法 | 调用时机 |
|---|---|---|---|---|
HttpSession | HttpSessionBindingListener | 用于 JavaBean 对象绑定到 HttpSession 对象和从 HttpSession 对象解绑的事件 | void valueBound (HttpSessionBindingEvent event) | 当对象被绑定(添加)到 HttpSession 对象中时 |
void valueUnbound (HttpSessionBindingEvent event) | 当对象从 HttpSession 对象中解除绑定(移除)时 | |||
HttpSessionActivationListener | 用于 HttpSession 中对象活化和钝化的过程 | void sessionWillPassivate (HttpSessionBindingEvent event) | 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前 | |
void sessionDidActive (HttpSessionBindingEvent event) | 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后 |
注册器
注册 Servlet 器有 2 种方式,分别是:
在 web.xml 中注册器;
使用 @WebListener 注册器。
1. 在 web.xml 中注册器
在 web.xml 中使用 <listener> 标签配置器,Web 容器会自动把器注册到事件源中,示例代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp网站站点" rel="nofollow" />
package net.biancheng.www.servlet;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* 器实例代码
*
* @author 编程帮 www.biancheng网站站点" rel="nofollow" />
- 随机文章
- 鹤壁马尔代夫球场(鹤壁唯一马尔代夫主题球场隆重开业)
- 东方航空马尔代夫(东航马尔代夫航线上客座率超八成!)
- 龙游马尔代夫水库(龙游水库,马尔代夫的一个独特景点)
- 亲子 马尔代夫(亲子游马尔代夫,度过难忘假期)
- 帕劳 巴厘岛 马尔代夫(亚洲度假胜地之选:帕劳、巴厘岛、马尔代夫)
- 广西版纳马尔代夫(广西的版纳如何成为中国的马尔代夫?)
- 揭西马尔代夫旅游(揭西马尔代夫:一个梦幻般的旅游胜地)
- 秀禾 马尔代夫(秀禾 马尔代夫:享受惬意假期的绝佳选择)
- 湖北襄阳马尔代夫(襄阳市建成中国首个马尔代夫主题公园)
- 冬游马尔代夫沙滩(冬天的天堂,马尔代夫美丽沙滩等着你)
- 国足彩票马尔代夫(国足大胜马尔代夫,成功晋级世预赛!)
- 广州马尔代夫指哪(广州马尔代夫是哪个国家的旅游胜地?)
- 扮演马尔代夫的人(探索马尔代夫:水幕与白沙的完美融合)
- 海城马尔代夫水库(海城水库成为马尔代夫首个淡水资源库)
- 浙江出发马尔代夫(浙江游客再次驰援马尔代夫,共克时艰)
- 最美马尔代夫海岛(探秘马尔代夫最美海岛,如入画中世界)
- 忻州马尔代夫酒吧(忻州新开马尔代夫酒吧,再现海岛风情)
- 国家 马尔代夫(马尔代夫:美丽海滩与热带岛屿的天堂)
- 罗马马尔代夫浴场(罗马王宫酒店在马尔代夫开设私人浴场)
- 遇见最美马尔代夫(遭遇最柔软风景,马尔代夫萤火虫之舞)
- 姐妹 马尔代夫(姐妹游马尔代夫:热带度假的绝美之选)
- 六扇 马尔代夫(重温马尔代夫美景:探索六个令人惊叹的景点)
- 武汉马尔代夫烧烤(武汉市场现新兴美食——马尔代夫烧烤)
- 阳光海岸马尔代夫(美丽马尔代夫:阳光海岸等您来探索!)
- 马尔代夫停船旅游(马尔代夫暂停游轮停靠以遏制病毒传播)
- 马尔代夫东方卫视(东方卫视:探寻马尔代夫的美丽与文化)
- 川航 马尔代夫(川航开启马尔代夫航线,首航圆满成功!)
- 马尔代夫出征时间(马尔代夫出征时间确定,即将开展行动)
- 重庆马尔代夫涨水(重庆马尔代夫遇上涨水,游客被迫离开)
- 搓麻 马尔代夫(马尔代夫风光无限,旅游新体验在搓麻游戏中!)
