在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)
相关推荐
Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...
Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动或停止时,或者在某个Servlet实例被创建或销毁时。本教程将深入探讨Servlet监听器的工作原理、类型以及...
Servlet监听器是Java Web开发中的一种关键组件,主要用于监控和响应Web应用程序中的特定事件。它们是Servlet规范中定义的特殊类,能够监听ServletContext、HttpSession和ServletRequest等域对象的生命周期事件,以及...
在Java Web开发中,Servlet监听器(Servlet Listeners)是一种重要的组件,它们可以在特定的事件发生时被调用,比如Web应用的初始化、用户会话的创建或销毁等。在这个例子中,我们将探讨如何利用Servlet监听器在系统...
继续深入学习,你还可以了解Servlet的过滤器、监听器、会话管理以及MVC框架如Spring MVC中的Servlet应用等高级主题。在实际开发中,Servlet常与JSP、JSF、Struts、Spring Boot等技术结合,构建出强大的企业级Web应用...
Servlet监听器则用于监听客户端的请求和服务器端的特定事件,例如session的创建、销毁,以及用户的登录、注销等。监听器通过实现Servlet规范定义的接口,如`HttpSessionListener`、`ServletRequestListener`等,可以...
11. **部署与配置**:这个实例还需要在Web服务器(如Tomcat)上进行部署,并在web.xml文件中配置Servlet和监听器。 通过学习和实践这个【jsp+Servlet的网上购物实例】,开发者能够深入理解Web应用程序的开发流程,...
Servlet是Java Web开发中的一个重要组件,它主要用于处理...如果你对Servlet有了更深入的理解,还可以探索更多高级主题,如多线程处理、异步Servlet、过滤器和监听器等。希望这个实例能成为你学习Servlet的宝贵资料。
Servlet监听器原理,具体使用场景,具体实例
- **工作原理**:监听器通过实现Servlet规范中的各种监听器接口,如`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener`等,当触发相应事件时,容器会调用相应的监听器方法。 - **应用...
Servlet是Java Web开发中的核心组件,它用于处理HTTP请求并生成动态响应。在这个"手工编写Servlet的详细过程+实例...通过不断的实践和学习,你可以进一步探索Servlet的高级特性,如过滤器、监听器,以及MVC模式的应用。
在Java Web开发中,监听器(Listener)是一个重要的组件,它们是Servlet API的一部分,用于监听特定事件并作出响应。在本示例中,“监听器实例jsp编写望大家喜欢”这个项目,显然涉及到如何在JSP(JavaServer Pages...
- 提到的`web.xml`文件是Web应用程序的部署描述符,用于配置Servlet、过滤器、监听器等。在这个例子中,需要在`web.xml`中定义`LoginServlet`的映射,以便服务器知道如何处理特定的URL请求。 6. **数据库连接**: ...
8. **监听器**:Servlet容器中的监听器(Listener)可以监听特定事件,如会话创建、销毁、请求到达等,并执行相应的操作。 现在,我们来看压缩包内的文件: 1. **阅读器下载.htm**:可能是提供阅读或下载Java ...
Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...
**Ajax+Servlet 实例** Ajax(Asynchronous JavaScript and XML)技术是现代Web开发中的关键组成部分,它允许在不刷新整个页面的情况下与服务器进行异步数据交互。Servlet是Java Web开发中的一个标准,用于处理和...
- `web.xml`:传统的部署描述符,用于配置Servlet映射、过滤器、监听器等。 - `@WebInitParam`:在注解中指定Servlet初始化参数。 - `@.WebServlet(urlPatterns = {...})`:通过注解定义Servlet映射路径。 6. **...
除了Servlet,Servlet API还提供了过滤器和监听器。过滤器可以在请求到达Servlet之前进行预处理,如字符编码转换、安全检查。监听器则可以监听Web应用中的特定事件,如会话创建、销毁等,实现自动化管理。 9. **多...
2. **部署描述符**(web.xml):这是Web应用的配置文件,定义了Servlet、过滤器、监听器等组件的配置信息。 3. **Servlet**:实现了Servlet接口的Java类,处理客户端请求。 4. **Servlet实例**:Servlet容器根据...