Servlet高级部分Listener
监听器的使用场景:
①:统计在线人数 ②:实现单一登录【一个账号只能在一台机器上登录】
Servlet中的8大监听器:
1. ServletContextListener
[接口方法] contextInitialized()与contextDestroyed()
[接收事件] ServletContextEvent
[触发场景] 在Container加载Web应用程序时(例如启动Container之后),会调用contextInitialized(),而当容器移除Web应用程序时,会调用contextDestroy()方法。
2. ServletContextAttributeListener
[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()
[接收事件] ServletContextAttributeEvent
[触发场景] 若有对象加入为application(ServletContext)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。
3. HttpSessionListener
[接口方法] sessionCreated()与sessionDestroyed()
[接收事件] HttpSessionEvent
[触发场景] 在session(HttpSession)对象建立或者消亡时,会分别调用这两个方法。
4. HttpSessionAttributeListener
[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为session(HttpSession)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。
5. ServletRequestListener
[接口方法] requestInitialized()与requestDestroyed()
[接收事件] RequestEvent
[触发场景] 在request(HttpServletRequest)对象建立或者消亡时,会分别调用这两个方法。
6. ServletRequestAttributeListener
[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为request(HttpServletRequest)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。
7. HttpSessionBindingListener
[接口方法] valueBound()与valueUnbound()
[接收事件] HttpSessionBindingEvent
[触发场景] 实现HttpSessionBindingListener接口的类别,其实例如果被加入到session(HttpSession)对象的属性中,则会调用valueBound(),如果从session(HttpSession)对象的属性中移除,则会调用valueUnbound(),实现HttpSessionBindingListener接口的类别不需要在web.xml中设定。
8. HttpSessionActivationListener
[接口方法] sessionDidActivate()与sessionWillPassivate()
[接收事件] HttpSessionEvent
[触发场景] Activate与Passivate是用于置换对象的动作,当session对象为了资源利用或者负载均衡等原因而必须暂时储存至硬盘或其他存储器时(通过对象序列化),所作的动作称为Passivate,而硬盘或者储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以sessionDidActivate()与sessionWillPassivate()分别于Activate后和Passivate前调用。
除了HttpSessionBindingListener和HttpSessionActivationListener外,必须在web.xml中向容器注册,容器才会在对应的事件发生时调用对应的类别。
代码演示:
TestServlet.java
public class TestServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行get请求");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行post请求");
}
}
TestListener.java
public class TestListener implements ServletRequestListener{ @Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("request销毁");
} @Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("request初始化");
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ListenerDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>cn.woo.servlet.TestServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/servlet/testServlet</url-pattern>
</servlet-mapping> <!-- 配置Listener:监听request的初始化和销毁 -->
<listener>
<listener-class>cn.woo.listener.TestListener</listener-class>
</listener> </web-app>
通过:http://localhost:8080/ListenerDemo/servlet/testServlet 访问Servlet
控制台打印:
Servlet高级部分Listener的更多相关文章
- Servlet的监听器Listener
Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是 随web应用的启动而启动,只初始化一次,随web ...
- servlet 高级知识之Listener
Listener,顾名思义,监听器.它可以监听客户端的请求.服务端的操作等. 通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionCre ...
- [web]Servlet中的Listener和Filter
建议先看看 ——> Servlet工作原理 一.Listener 在Tomcat服务中,Listener的设计是基于观察者模式的,目前在Servlet中提供6中两类事件的观察者接口,它们分别是: ...
- Servlet监听器(Listener)实例
以下内容是翻译自http://www.journaldev.com/1945/servletcontextlistener-servlet-listener-example: 说明:web.xml的加 ...
- <<< web里面Servlet高级应用的基础介绍
Servlet中的页面跳转?两种方式,实现跳转:内部跳转(请求转发).外部跳转(重定向)内部跳转(请求转发)特点:在服务器内部完成页面之间的跳转:请求只有一次:浏览器地址不会改变.request.ge ...
- Servlet高级
1. 获取初始化参数 在web.xml中配置Servlet时,可以配置一些初始化参数.而在Servlet中可以通过ServletConfig接口提供的方法来取得这些参数. index.jsp < ...
- Servlet高级应用---Servlet与缓存
一]设置缓存文件的有效日期 重点方法: HttpServletRequest类: 1>String getRequest ...
- servlet 高级知识之Filter
Filter叫做拦截器, 对目标资源拦截,拦截HTTP请求和HTTP响应,本质是对url进行拦截. 与serlvet不同的是, Filter的初始化是随着服务器启动而启动. 在Filter接口中定义了 ...
- Servlet高级部分Filter(过滤器)
一:Filter称之为"过滤器",用在Servlet外,对request和response进行修改.它是AOP(面向切面编程思想的一种体现),Filter中有一个FilterCha ...
随机推荐
- Dialog 自定义使用1
一: 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- 主线程与UI线程简介
---------------siwuxie095 Java 程序的主线程 当 Java 程序启动时,一个线程立刻运行,该线程通常叫做程 ...
- c/c++进制转换练习
1 下列数最大的是( ).括号内为数字,括号外为进制.(360集团) (10010101)2 (227)8------>10010111 (96)16------>10010110 (14 ...
- iOS开发中,修改ASIHTTPRequest源码,禁止在POST时URL编码
通过ASIHTTPRequest库进行POST时,会对POST的文本内容进行encodeURL,而且ASIHTTPRequest自身并没有配置项可以关闭这个转换. 本文提供一个方法关闭encodeUR ...
- python远程登录Paramiko模块的安装
最近做云平台的项目,需要使用python来管理所有的主机,我选择了paramiko.它跨平台的,linux和window都可以使用,pssh只支持linux. 1:安装gcc和python-devel ...
- UVa 11468 Substring (AC自动机+概率DP)
题意:给出一个字母表以及每个字母出现的概率.再给出一些模板串S.从字母表中每次随机拿出一个字母,一共拿L次组成一个产度为L的串, 问这个串不包含S中任何一个串的概率为多少? 析:先构造一个AC自动机, ...
- vue中v-if 与v-show的区别
v-if vs v-show v-if 是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建. v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做—— ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 消耗战——dp+虚树
题目 [题目描述] 在一场战争中,战场由 $n$ 个岛屿和 $n-1$ 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为 $1$ 的岛屿,而且他们已经没有足够多 ...
- 全网排名第一的免费开源ERP Odoo Git源代码部署教程
文/开源智造联合创始人老杨 本文来自<开源自主OdooERP部署架构指南>试读:第三章-Git源代码部署 .书籍尚未出版,请勿转载.欢迎您反馈阅读意见. 我们将从git源代码部署Odoo ...