`

Servlet 监听器 及实例

    博客分类:
  • j2ee
阅读更多

    在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)

分享到:
评论
1 楼 sayaliting 2013-11-06  
龙兄,过来看你了,希望你能写出更多优质的帖子,学习中

相关推荐

    JAVA Servlet监听器listener学习资料

    Java Servlet监听器(Listener)是Java Web开发中的一个重要组件,它们允许开发者在特定事件发生时执行自定义逻辑,而无需直接修改原有的业务代码。监听器是Servlet规范的一部分,通过实现特定的接口,开发者可以...

    servlet监听器教程(含代码)

    Servlet监听器是Java Web开发中的一个重要概念,它允许开发者在特定事件发生时执行代码,比如在Web应用程序启动或停止时,或者在某个Servlet实例被创建或销毁时。本教程将深入探讨Servlet监听器的工作原理、类型以及...

    servlet监听器

    Servlet监听器是Java Web开发中的一种关键组件,主要用于监控和响应Web应用程序中的特定事件。它们是Servlet规范中定义的特殊类,能够监听ServletContext、HttpSession和ServletRequest等域对象的生命周期事件,以及...

    利用servlet监听器,系统启动时创建自定义容器简单例子

    在Java Web开发中,Servlet监听器(Servlet Listeners)是一种重要的组件,它们可以在特定的事件发生时被调用,比如Web应用的初始化、用户会话的创建或销毁等。在这个例子中,我们将探讨如何利用Servlet监听器在系统...

    使用servlet实例

    继续深入学习,你还可以了解Servlet的过滤器、监听器、会话管理以及MVC框架如Spring MVC中的Servlet应用等高级主题。在实际开发中,Servlet常与JSP、JSF、Struts、Spring Boot等技术结合,构建出强大的企业级Web应用...

    Servlet过滤器与监听器.doc

    Servlet监听器则用于监听客户端的请求和服务器端的特定事件,例如session的创建、销毁,以及用户的登录、注销等。监听器通过实现Servlet规范定义的接口,如`HttpSessionListener`、`ServletRequestListener`等,可以...

    jsp+Servlet的网上购物实例

    11. **部署与配置**:这个实例还需要在Web服务器(如Tomcat)上进行部署,并在web.xml文件中配置Servlet和监听器。 通过学习和实践这个【jsp+Servlet的网上购物实例】,开发者能够深入理解Web应用程序的开发流程,...

    利用Servlet求平方根的完美实例

    Servlet是Java Web开发中的一个重要组件,它主要用于处理...如果你对Servlet有了更深入的理解,还可以探索更多高级主题,如多线程处理、异步Servlet、过滤器和监听器等。希望这个实例能成为你学习Servlet的宝贵资料。

    Servlet监听器

    Servlet监听器原理,具体使用场景,具体实例

    jsp/servlet中过滤器和监听器的区别

    - **工作原理**:监听器通过实现Servlet规范中的各种监听器接口,如`ServletContextListener`、`HttpSessionListener`、`ServletRequestListener`等,当触发相应事件时,容器会调用相应的监听器方法。 - **应用...

    手工编写Servlet的详细过程+实例

    Servlet是Java Web开发中的核心组件,它用于处理HTTP请求并生成动态响应。在这个"手工编写Servlet的详细过程+实例...通过不断的实践和学习,你可以进一步探索Servlet的高级特性,如过滤器、监听器,以及MVC模式的应用。

    监听器实例jsp编写望大家喜欢

    在Java Web开发中,监听器(Listener)是一个重要的组件,它们是Servlet API的一部分,用于监听特定事件并作出响应。在本示例中,“监听器实例jsp编写望大家喜欢”这个项目,显然涉及到如何在JSP(JavaServer Pages...

    servlet登录实例

    - 提到的`web.xml`文件是Web应用程序的部署描述符,用于配置Servlet、过滤器、监听器等。在这个例子中,需要在`web.xml`中定义`LoginServlet`的映射,以便服务器知道如何处理特定的URL请求。 6. **数据库连接**: ...

    Java Servlet开发与实例.rar

    8. **监听器**:Servlet容器中的监听器(Listener)可以监听特定事件,如会话创建、销毁、请求到达等,并执行相应的操作。 现在,我们来看压缩包内的文件: 1. **阅读器下载.htm**:可能是提供阅读或下载Java ...

    Servlet对Cookie和Session的管理源码实例

    Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...

    Ajax+Servlet 实例

    **Ajax+Servlet 实例** Ajax(Asynchronous JavaScript and XML)技术是现代Web开发中的关键组成部分,它允许在不刷新整个页面的情况下与服务器进行异步数据交互。Servlet是Java Web开发中的一个标准,用于处理和...

    深入学习 Java Servlet开发与实例

    - `web.xml`:传统的部署描述符,用于配置Servlet映射、过滤器、监听器等。 - `@WebInitParam`:在注解中指定Servlet初始化参数。 - `@.WebServlet(urlPatterns = {...})`:通过注解定义Servlet映射路径。 6. **...

    Servlet常用语法Demo

    除了Servlet,Servlet API还提供了过滤器和监听器。过滤器可以在请求到达Servlet之前进行预处理,如字符编码转换、安全检查。监听器则可以监听Web应用中的特定事件,如会话创建、销毁等,实现自动化管理。 9. **多...

    servlet基础与servlet容器模型

    2. **部署描述符**(web.xml):这是Web应用的配置文件,定义了Servlet、过滤器、监听器等组件的配置信息。 3. **Servlet**:实现了Servlet接口的Java类,处理客户端请求。 4. **Servlet实例**:Servlet容器根据...

Global site tag (gtag.js) - Google Analytics