1.三个域对象的监听(创建和销毁) servletContext,  session, request 监听器

ServletContext监听器:

public class MyServletContextListener implements ServletContextListener {

	@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Context 初始化");
} @Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Context 销毁");
} }

web.xml 配置

<listener>
<listener-class>com.kevin.web.listener.MyServletContextListener</listener-class>
</listener>

Session监听器:

public class MyHttpSessionListener implements HttpSessionListener {

	@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session 创建"); } @Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session 摧毁");
} }

Request监听器:

public class MyServletRequestListener implements ServletRequestListener {

	@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request 创建"); } @Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request 销毁"); }
}

监听器还可以监听三个域中所添加的属性变化:

public class MyServletContextAttributeListener implements
ServletContextAttributeListener { public void attributeAdded(ServletContextAttributeEvent scab) { System.out.println(scab.getValue());
System.out.println("加东西了!!"); } public void attributeRemoved(ServletContextAttributeEvent scab) {
System.out.println("删东西了!!");
} public void attributeReplaced(ServletContextAttributeEvent scab) {
System.out.println("替换东西了!!");
}
}
public class MyRequestAndSessionAttributeListener implements
HttpSessionAttributeListener, ServletRequestAttributeListener { public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session中加东西了!!");
} public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session中删东西了!!");
} public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session中替换东西了!!");
} public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request中加东西了!!");
} public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request中删东西了!!");
} public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request中替换东西了!!");
}
}

HttpSessionBindingListener HttpSessionActivationListener 这两个监听器 不需要再web.xml文件中配置

public class MyBean implements HttpSessionBindingListener {

	private String name;

	public void valueBound(HttpSessionBindingEvent event) {
System.out.println("自己被加到session中了");
} public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("自己被session踢出来了");
}
}
public class MyBean2 implements HttpSessionActivationListener,Serializable {

	public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("session从硬盘回到内存了");
} public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("session被序列化到硬盘了");
}
}

2. 实例: 在线人数计数器

public class OnLineCountListener implements HttpSessionListener {

	@Override
public void sessionCreated(HttpSessionEvent se) { ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("num");
if(num==null)
context.setAttribute("num", 1);
else
{
num++;
context.setAttribute("num", num);
} } @Override
public void sessionDestroyed(HttpSessionEvent se) { ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("num");
if(num==null)
context.setAttribute("num", 1);
else
{
num--;
context.setAttribute("num", num);
}
} }

3. 实例: 自定义session扫描器

public class SessionScanerListener implements HttpSessionListener,ServletContextListener {

	private List<HttpSession> list = Collections.synchronizedList( new LinkedList<HttpSession>());
private Integer lock = 0; @Override
public void contextInitialized(ServletContextEvent sce) {
Timer timer = new Timer();
timer.schedule(new MyTask(list, lock) , 0, 1000*15); } @Override
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
synchronized (lock) {
list.add(session);
}
System.out.println(session + "创建了");
} @Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println(session + "销毁了");
} @Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub }
} class MyTask extends TimerTask
{
private List<HttpSession> list;
private Integer lock; public MyTask(List<HttpSession> list, Integer lock)
{
this.list = list;
this.lock = lock;
} @Override
public void run() { synchronized (lock) {
System.out.println("定时器启动了");
ListIterator<HttpSession> it = list.listIterator();
while(it.hasNext())
{
HttpSession session = it.next();
if(System.currentTimeMillis()-session.getLastAccessedTime() > 1000*15)
{
session.invalidate();
list.remove(session);
}
}
}
}
}

JavaWeb -- sevlet 监听器的更多相关文章

  1. JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

    JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...

  2. JavaWeb基础—监听器Listener

    javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们 ...

  3. JavaWeb中监听器

     一.事件源:三大域! ServletContext 生命周期监听:ServletContextListener,它有两个方法,一个在创建时调用,一个在销毁时调用: void contextIniti ...

  4. JavaWeb 之监听器

    1. JavaWeb 监听器概述 在 JavaWeb 被监听的事件源为: ServletContext, HttpSession, ServletRequest, 即三大域对象. 监听域对象" ...

  5. Javaweb基础--->监听器listener(转发)

    JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Servl ...

  6. IT兄弟连 JavaWeb教程 监听器1

    1  基本概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序 ...

  7. 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...

  8. 深入分析JavaWeb Item39 -- 监听器(Listener)学习进阶

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  9. javaweb之监听器详解

    在servlet中定义了多种类型的监听器,他们用于监听事件源分别是servletContext,httpsession,servletrequest 这三个域对象. servlet中监听器主要有三类: ...

随机推荐

  1. VS2012如何显示行号

    Tools-Options-Text Editor-All Languages –General – Display

  2. style="display:{{searchInput==='' ? 'none':'block'}} "

    当用户没有有效输入时,是否显示提交按钮 style="display:{{searchInput==='' ? 'none':'block'}} "

  3. VMware Workstation 虚拟机纯 Linux 终端如何安装 VMware Tools ?

    VMware Workstation 虚拟机纯 Linux 终端如何安装 VMware Tools ? 1.首先在虚拟机设置里面设置一个共享文件夹 2.在虚拟机菜单栏中选择 VMware Tools ...

  4. Jquery获取dom上的绑定事件

    在1.8.0版本之前的写法: $.data(domObj,'events');//或者$('selector').data('events') 1.8.0及以后的写法: $._data(domObj, ...

  5. Oracle 11g Enhancements in AWR Baselines

    Enhancements in AWR Baselines A baseline is any set of snapshots taken over a period of time. The sn ...

  6. windows中使用Findwindow函数与FindWindowEx函数来实现自动控制、触发第三方软件事件的方法

    FindWindow 用来根据类名和窗口名来得到窗口句柄的.但是这个函数不能查找子窗口,也不区分大小写. 如果要从一个窗口的子窗口中查找需要使用FindWindowEX. 如果要搜索的外部程序的窗口标 ...

  7. Nginx图片及样式文件不记录访问日志

    1.Nginx作为web服务器是可直接在server配置文件中做如下配置: server { listen ; server_name www.fansik.com; access_log /data ...

  8. iOS警告框和操作表

    应用如何与用户交流呢? 警告框(AlertView)和操作表(ActionSheet)就是为此而设计的. 本文案例的原型草图如图3-48所示,其中有两个按钮“Test警告框”和“Test操作表”,点击 ...

  9. easyui-combobox 中多选的默认值设置、获取多选值及JS包含字符串、删除字符串

    1.项目中使用到combobox的多选值及相关操作,不多说,直接上代码: <input id="education" name="education" c ...

  10. jQuery EasyUI - 数据表格(DataGrid)

    由于工作需要,项目使用前端 jQuery EasyUI - DataGrid 来控制数据表格. 1.加载相关js和css,因为easyui依赖jquery,所有加载easyui前要先加载jquery, ...