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,如果只是单一 ...
随机推荐
- php反射获取类和方法中的注释
通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释 所用到的主要类及其方法 ReflectionClass ReflectionClass::getDocComment ...
- ELK收集mysql_slow.log
关于慢查询的收集及处理也耗费了我们太多的时间和精力,如何在这一块也能提升效率呢?且看本文讲解如何利用ELK做慢日志收集. ELK 介绍 ELK 最早是 Elasticsearch(以下简称ES).Lo ...
- iOS底层原理总结 - 探寻block的本质(一)
面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...
- Atitit Seed-Filling种子填充算法attilax总结
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList Proces ...
- nginx 404 403等错误信息页面重定向到网站首页或其它事先指定的页面
server { listen 80; server_name www.espressos.cn; location / { root html/www; index index.html index ...
- Gartner 2018新技术成熟度曲线
https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/82047719 近日,Gartner发布了2018年新技术成熟度曲线,首次将生物 ...
- setRequestedOrientation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//通过程序改变屏幕显示的方向 1.landscape:横屏(风景 ...
- Asp.Net正则获取链接地址
string html = “html代码”; Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?< ...
- Python爬取猫眼top100排行榜数据【含多线程】
# -*- coding: utf-8 -*- import requests from multiprocessing import Pool from requests.exceptions im ...
- celery 实例进阶
认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...