Listener 监听对象的创建和销毁
HttpSessionListener、ServletContextListener、ServletRequestListener分别用于控制Session、context、request的创建和销毁。触发时机分别为:
- HttpSessionListener:监听Session的创建和销毁。创建session时执行sessionCreated(HttpSessionEvent se)方法。超时或者执行session.invalidate()时执行sessionDestroyed(HttpSessionEvent se)方法。该Listener用于收集在线者信息。
- ServletContextListener:监听context的创建和销毁。context代表当前的web应用程序。服务器启动或者热部署war包时执行contextInitialized(ServletContextEvent event)方法。服务器关闭或者只关闭该web时会执行contextDestoryed(ServletContextEvent event)方法。该Listener可用于获取web.xml里配置的初始化参数。
- ServletRequestListener:监听request的创建和销毁。用户每次请求request都会执行requestInitialized(ServletRequestEvent event)方法。request处理完毕自动销毁前执行requestDestoryed(ServletRequestEvent event)方法。如果一个HTML页面内含有多个图片,则请求一次HTML页面可能会出发多次request事件。
package linstener; import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class LinstenerTest implements HttpSessionListener, ServletContextListener, ServletRequestListener { private Log log =LogFactory.getLog(this.getClass());
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
//销毁Request时调用
HttpServletRequest request=(HttpServletRequest)arg0.getServletRequest();
long time=System.currentTimeMillis()-(long)request.getAttribute("dateCreated");
log.info(request.getRemoteAddr()+"请求处理结束,用时"+time+"毫秒。");
} @Override
public void requestInitialized(ServletRequestEvent arg0) { //创建Request时调用
HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();
String uri=request.getRequestURI();
uri=request.getQueryString()==null?uri:(uri+"?"+request.getQueryString());
request.setAttribute("dateCreated", System.currentTimeMillis());
log.info("IP:"+request.getRemoteAddr()+" 请求 "+uri);
} @Override
public void contextDestroyed(ServletContextEvent arg0) {
//销毁Servlet上下文时调用
ServletContext servletContext=arg0.getServletContext();
log.info("即将关闭"+servletContext.getContextPath());
} @Override
public void contextInitialized(ServletContextEvent arg0) {
//加载Servlet上下文时调用
ServletContext servletContext=arg0.getServletContext();
log.info("即将启动"+servletContext.getContextPath());
} @Override
public void sessionCreated(HttpSessionEvent arg0) {
//创建session时调用
HttpSession session =arg0.getSession();
log.info("新创建一个session,ID为:"+session.getId());
} @Override
public void sessionDestroyed(HttpSessionEvent arg0) {
//销毁session前调用
HttpSession session =arg0.getSession();
log.info("销毁一个session,ID为:"+session.getId());
} }
Listener类web.xml文件中的配置:
<listener>
<listener-class>
linstener.LinstenerTest
</listener-class>
</listener>
Listener 监听对象的创建和销毁的更多相关文章
- Java监听器中ServletRequestListener监听Request的创建和销毁
ServletRequest和HttpServletRequest的区别 HttpServletRequest和ServletRequest都是接口,HttpServletRequest继承自Serv ...
- Listener 监听对象的属性变化
Listener用于监听Session.context.Request的属性变化,接口名称格式为xxxAttributeListener,包括HttpSessionAttributeListener. ...
- javaWeb学习之Listener监听
] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet listener filt ...
- Listener 监听Session内的对象
Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener.它们的触发时机分别为: Http ...
- Proxy监听对象的数据变化,处理绑定数据很有用
Proxy可以监听对象身上发生了什么事情,并在这些事情发生后执行一些相应的操作.一下子让我们对一个对象有了很强的追踪能力,同时在数据绑定方面也很有用处. }; //interceptor 拦截 var ...
- AngularJS - Watch 监听对象
<body> <div ng-app="myApp"> <div ng-controller="firstController"& ...
- java多个listener监听
java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...
- [ Java学习基础 ] Java对象的创建和销毁
类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性.一个对象的生命周期包括三个阶段:创建.使用和销毁. 创建对象 创建对象包括两个步骤:声明和实例化. 声明 声明对象与声明普通变量没有区别 ...
- 在vue中使用watch监听对象或数组
最近发现在vue中使用watch监听对象或者数组时,当数组或者对象只是单一的值改变时,并不会出发watch中的事件. 在找问题过程中,发现当数组使用push一类的方法时,会触发watch,如果只是单一 ...
随机推荐
- eclipse创建activiti6 项目demo
1 新建maven 项目 2 修改 pom 文件,完整内容如下 <?xml version="1.0" encoding="UTF-8"?> < ...
- mysql数据库1129错误
错误:Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 原因: 同一个i ...
- 小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码
因为我们需要用户扫码进入小程序,每一个货柜都有一个对应的二维码,当然每个二维码里的信息也不一样.用户扫码进入小程序之后,二维码的信息会以参数q带进去,而我们只能在onLoad事件中拿到这个参数, 但是 ...
- 在linux中配置环境变量
JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据Linux ...
- 使用curator 来管理elasticsearch的index
这里我们参考官网安装curator https://www.cookiesinn.org/elasticsearch_curator_delete_indices/ https://www.elast ...
- php分享二十九:命名空间
1:命名空间的命名不区分大小写 2:namespace必须在所有代码之前,除了declare语法以外(不过他之前可以有注释,空行等) 3:只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和t ...
- php分享十六:php读取大文件总结
一:file函数读取 file()函数的效率很底下 如果是有规律的文件.比如每行一条相应数据.那么尽量不要是用file()函数,可以使用file_get_contents()然后用explode切割. ...
- 一:php配置注意
display_errors string 该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示. 设置 "stderr" 表示发送到 stderr 而不是 ...
- 关于 NSInvocation
Invocation 调用的意思. 可想而知NSInvocation 是一个 方法调用 封装的类. 这体现了 面向对象的思想, 及一切皆对象.函数也不例外. 一般编程中,应该很少用到这个. 但是 ...
- Atitit js canvas的图像处理类库attilax总结与事业
Atitit js canvas的图像处理类库attilax总结与事业 1.1. 脸部识别JavaScript类库Tracking.js1 1.2. AlloyImage特性1 1.3. CamanJ ...