在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象。
Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型。
监听三个域对象创建和销毁的事件监听器
监听域对象中属性的增加和删除的事件监听器
监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。(查看API文档)
(1)ServletContextListener
监听servletContext域对象创建和销毁
ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。
当 ServletContext 对象被创建时,激发contextInitialized (ServletContextEvent sce)方法
当 ServletContext 对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。
servletContext域对象何时创建和销毁:
创建:服务器启动针对每一个web应用创建servletcontext
销毁:服务器关闭前先关闭代表每一个web应用的servletContext
实例: 当我们系统使用spring框架时,我们要获取bean,在controller里可以通过配置文件直接注入,但是在公共方法(**Utils)里想要获取Service类或DaoImpl实例,
基本上都要先得到WebApplicationContext对象,要获取WebApplicationContext对象基本上都先要获取ServletContext,
一般情况下在公共类里不方面获取ServletContext,要使用 WebApplicationContext非常的不方面,这时,我们可以自定义一个ServletContextListener ,
在创建ServletContext时,创建一个WebApplicationContext,
然后作为静态变量缓存在公共方法里,用的时候随时都能得到,代码如下:
public class SystemContextListener implements ServletContextListener { /** * 获取一个context * @param servletContextEvent */ @Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletCommonUtils.setContext(WebApplicationContextUtils.getWebApplicationContext(servletContextEvent.getServletContext())); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } }
在web.xml配置监听器:
<!-- 自定义监听器,用来获取spring的WebApplicationContext --> <listener> <listener-class>com.intel.store.listener.SystemContextListener</listener-class> </listener>
缓存在公用方法中:
public class ServletCommonUtils { private static WebApplicationContext context; private static Logger logger = LoggerFactory.getLogger(ServletCommonUtils.class); public static WebApplicationContext getContext() { return context; } public static void setContext(WebApplicationContext context) { ServletCommonUtils.context = context; } }
(2)HttpSessionListener
监听HttpSession域对象创建和销毁
HttpSessionListener接口用于监听HttpSession创建和销毁
创建一个Session时,sessionCreated(HttpSessionEvent se) 方法将会被调用。
销毁一个Session时,sessionDestroyed (HttpSessionEvent se) 方法将会被调用。
Session域对象创建和销毁的时机创建:用户每一次访问时,服务器创建session
销毁:如果用户的session 30分钟没有使用,服务器就会销毁session,我们在web.xml里面也可以配置session失效时间
经典案例就是统计在线人数(需要在web.xml中配置,此处省略,同上):
public class SystemSessionListener implements HttpSessionListener { private static long onlineCounter = 0l; @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { onlineCounter++; } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { onlineCounter--; } public static long getOnlineCounter() { return onlineCounter; } }
(3)ServletRequestListener
servletRequest域对象创建和销毁的时机:
创建:用户每一次访问,都会创建一个reqeust
销毁:当前访问结束,request对象就会销毁
(4)监听ServletContext, HttpSession, HttpServletRequest对象变化的监听器
监听三个域对象属性变化
Servlet规范定义了监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。
这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener ServletRequestAttributeListener
这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。
(5)还有一些不常用的监听器:HttpSessionBindingListener, HttpSessionBindingListener 可以参考(http://bbs.csdn.net/topics/190164471)
相关推荐
Servlet监听器原理,具体使用场景,具体实例
Servlet对Cookie和Session的管理:会话跟踪、会话浏览、过滤器、事件监听、以及不依赖浏览器的后台跟踪和浏览源码。
MVC:Model View Controller Model: Dao +JavaBean View: Jsp Controller: Servlet Dao: 用于连接数据库及进行数据库的操作:增、删、改、查等 ...Servlet监听器:给web中的各种操作绑定事件,并对事件进行处理
我们在编写JSP/Servle程序时,有相应的事件处理机制,在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。
可以查看上线人数 监听器 servlet 登出时,session失效。 UserInfoList list=UserInfoList.getInstance();//实例一个用户对象 UserInfoTrace ut=new UserInfoTrace();//实例一个ut String name=(String)session....
系统应具有提供学生基本信息的创建、查询、修改、和删除等操作功能,并具有良好的交互性,便于用户的操作使用。...servlet监听器 监听Web的各种操作,当相关的操作触发后将产生的事件,并对此事件进行处理
主要介绍了Java基于servlet监听器实现在线人数监控功能的方法,结合实例形式分析了ServletContextListener监听功能的相关使用步骤与操作技巧,需要的朋友可以参考下
14文件夹:过滤器(Filter),包括0个实例。对应的WEB-INF\src\mil\zcz\jsp\filter文件夹下包含88个Filter实例。 15文件夹:监听者(Listener),包括7个实例。对应的WEB-INF\src\mil\zcz\jsp\listener文件夹下包含8...
JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与...JavaWeb13-过滤器与监听器.rar
主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...
主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...
然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...
JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量 ----------------------------------- JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量 ----------------------------...
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................
实例32 优良及差 47 实例33 打印任意一年日历 48 实例34 一年四季的划分 51 第2篇 Java数据处理 第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常(ArithmeticException) 54 ...
本文实例讲述了JSP监听器用法。分享给大家供大家参考,具体如下: 监听器也叫Listener,是servlet服务的监听器。它可以监听客户端的请求,服务端的操作等。比如统计在线用户数量。每当增加一个HttpSession时,就会...
监听器(Listener)的注册方法和 Servlet 一样,有两种方式:代码注册或者注解注册。接下来通过本文给大家介绍Spring Boot的listener(监听器)简单使用,需要的朋友可以参考下
JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与...JavaWeb13-过滤器与监听器.rar
Java Web基础与实例教程的PPT,自己制作的PPT,将近400页,免费分享,童鞋们努力学习吧。
实例32 优良及差 47 实例33 打印任意一年日历 48 实例34 一年四季的划分 51 第2篇 Java数据处理 第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常(ArithmeticException)...