`
xudongcsharp
  • 浏览: 477248 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Servlet Listener

 
阅读更多
Listener功能

它是基于观察者模式设计的,Listener 的设计对开发 Servlet 应用程序提供了一种快捷的手段,能够方便的从另一个纵向维度控制程序和数据。目前 Servlet 中提供了 5 种两类事件的观察者接口,它们分别是:4 个 EventListeners 类型的,ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener 和 2 个 LifecycleListeners 类型的,ServletContextListener、HttpSessionListener。如下图所示:



Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:

ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。

ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在ServletContext初始化和销毁时,在服务器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时,在服务器控制台打印对应的信息。

要获得以上的功能,监听器必须实现以下3个接口:

HttpSessionListener

ServletContextListener

ServletContextAttributeListener


  
 /** 
     *  
     */  
    package com.ee.listener;  
      
    import javax.servlet.ServletContextAttributeEvent;  
    import javax.servlet.ServletContextAttributeListener;  
    import javax.servlet.ServletContextEvent;  
    import javax.servlet.ServletContextListener;  
    import javax.servlet.http.HttpSessionEvent;  
    import javax.servlet.http.HttpSessionListener;  
      
    /** 
     * @author Administrator 
     * 
     */  
    public class OnlineUserListener implements HttpSessionListener,  
            ServletContextListener, ServletContextAttributeListener {  
        private long onlineUserCount = 0;  
      
        public long getOnlineUserCount() {  
            return onlineUserCount;  
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.ServletContextAttributeListener#attributeAdded(javax.servlet.ServletContextAttributeEvent) 
         */  
        @Override  
        public void attributeAdded(ServletContextAttributeEvent arg0) {  
      
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.ServletContextAttributeListener#attributeRemoved(javax.servlet.ServletContextAttributeEvent) 
         */  
        @Override  
        public void attributeRemoved(ServletContextAttributeEvent arg0) {  
      
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.ServletContextAttributeListener#attributeReplaced(javax.servlet.ServletContextAttributeEvent) 
         */  
        @Override  
        public void attributeReplaced(ServletContextAttributeEvent attributeEvent) {  
            System.err.println("...attributeReplaced...");  
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) 
         */  
        @Override  
        public void contextDestroyed(ServletContextEvent arg0) {  
      
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) 
         */  
        @Override  
        public void contextInitialized(ServletContextEvent arg0) {  
      
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent) 
         */  
        @Override  
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {  
            onlineUserCount ++;  
            toUpdateCount(httpSessionEvent);  
        }  
      
        /* (non-Javadoc) 
         * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent) 
         */  
        @Override  
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {  
            onlineUserCount --;  
            toUpdateCount(httpSessionEvent);  
        }  
      
        private void toUpdateCount(HttpSessionEvent httpSessionEvent){  
            httpSessionEvent.getSession().setAttribute("onlineUserCount", onlineUserCount);  
        }  
    }  



Web.xml

    <listener>  
        <listener-class>com.ee.listener.OnlineUserListener</listener-class>  
    </listener> 



JSP:

   <%@ page language="java" contentType="text/html; charset=UTF-8"  
        pageEncoding="UTF-8"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    <title>主页</title>  
    </head>  
    <body>  
        <h4>你好!</h4>  
        在线人数:<h1><%=request.getSession().getAttribute("onlineUserCount") %></h1>  
    </body>  
    </html>  

分享到:
评论

相关推荐

    ServletListener大全

    ### ServletListener大全 #### 概述 在Java Web开发中,`ServletListener`是一类特殊的设计模式,主要用于监听容器中的事件。例如,当一个HTTP会话被创建或销毁时,或者当请求开始或结束时,这些监听器可以执行特定...

    SpringBoot整合Listener的两种方式.docx

    这个接口提供了两个方法:`contextInitialized()`和`contextDestroyed()`,分别在Servlet容器启动和关闭时被调用。 ```java @WebListener public class FirstListener implements ServletContextListener { @...

    关于web.xml配置文件servlet,filter,listener加载顺序

    关于filter、servlet在web.xml配置及加载顺序

    servlet监视器

    ### 关于Servlet监视器(Listener)的详细解析 在Java Web开发中,Servlet技术一直扮演着重要的角色。其中,Servlet监听器(Listener)是Servlet容器提供的一个非常实用的功能,它能够帮助开发者监听某些特定事件的...

    servlet监听器案例

    在提供的压缩文件"servletlistener"中,可能包含了示例代码、配置文件以及相关的JSP页面,这些资源可以帮助你更好地理解和实践Servlet监听器的使用。通过分析和运行这些示例,你可以直观地看到监听器如何响应特定的...

    servlet+filter+listener 详解

    Servlet、Filter、Listener 详解 Servlet 是运行在服务器上的小程序,它可以使任何 Java 应用程序、浏览器或任何设备。Servlet 的客户端可以提出请求并获得该请求的响应。Servlet 在初始化后即驻留内存中,因此每次...

    servlet-api 集合

    2. **Servlet-API 2.3**:发布于2000年,这个版本引入了Servlet Filter和Servlet Listener的概念。Servlet Filter允许开发者在请求到达目标Servlet之前或之后对其进行拦截和处理,用于实现如日志记录、性能监控、...

    servlet--listener 各种接口的简单例子

    在Java的Web开发中,Servlet和Listener是两个非常重要的组件,它们构成了动态Web应用程序的核心部分。Servlet主要负责处理客户端的请求并返回响应,而Listener则用于监听和响应各种Web应用程序中的事件。本教程将...

    第三章 Servlet 编程.ppt

    2. Servlet Listener:Servlet Listener 是一种特殊的 Servlet,可以对客户端的请求进行监听和处理。 在编写 Servlet 程序时,需要注意以下几点: 1. 需要继承 javax.servlet.http.HttpServlet 接口。 2. 需要重写...

    servlet监听器技术源码

    通过`servletListener`这个文件名,我们可以推测这是一个关于Servlet监听器技术的示例代码或教程。可能包含如何创建监听器类,如何实现各种接口方法,以及如何在项目中部署和使用监听器等内容。深入学习这部分知识,...

    servlet 监听器范例

    在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...

    Servlet中的八大Listener

    Servlet中的八大Listener是Java Web开发中的重要组成部分,它们允许开发者监听和响应Web应用程序中的特定事件。这些Listener提供了在Servlet容器(如Tomcat)管理的生命周期事件上的扩展点,使得我们能够在恰当的...

    cms.rar_jsp servlet cms_班级管理系统

    此外,为了更好地组织代码和实现模块化,可能会使用到Servlet Filter和Servlet Listener等高级特性。 在开发过程中,开发者可能使用了Eclipse、IntelliJ IDEA等IDE,配合Tomcat、Jetty等应用服务器进行部署和测试。...

    中山大学软件工厂jsp&servlet课件2

    8. **Servlet Filter和Servlet Listener**:如何利用Filter拦截请求和响应,以及监听应用事件。 9. **Web应用部署**:介绍如何在Tomcat或其他应用服务器上部署JSP和Servlet应用。 学习这些内容对于理解J2EE Web开发...

    java servlet做的图书管理系统.zip

    Servlet Listener则可以监听特定事件,如Session创建、销毁,应用启动、关闭等,实现相应功能。 7. **异常处理**:良好的异常处理机制可以确保系统的稳定性和用户体验。在Servlet中,可以使用try-catch-finally结构...

    比较适合与初学者的servlet的ppt和jsp教程~

    - 学习Servlet Filter和Servlet Listener,它们可以拦截请求、修改响应或监听Web应用的事件。 10. **部署和运行**: - 使用Tomcat或其他Web服务器部署和运行Servlet和JSP应用。 在学习过程中,实践非常重要,...

    乐趣大型购物系统 v1.1(jsp+servlet+mysql)130223.rar

    6. Servlet Filter和Servlet Listener:实现请求拦截和监听器功能,如登录检查、日志记录等。 通过这个项目,学生可以深入理解Web应用开发的基本流程,掌握JSP、Servlet和MySQL的综合运用,同时了解如何组织和设计...

    Servlet,JSP\20JSP数据库编程指南3.rar

    此外,书中可能还会涉及Servlet Filter和Servlet Listener,它们是Servlet容器中的重要组件,可用于拦截请求、监听事件,实现诸如登录验证、日志记录等功能。 对于JSP,书中会介绍EL(Expression Language)和JSTL...

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...

    Servlet、Filter、Listener深入理解.docx

    Servlet、Filter和Listener是Java Web开发中的核心组件,它们在构建动态Web应用程序中扮演着重要角色。下面将分别深入解析这三个概念。 **Servlet接口** Servlet是Java编程语言中定义的一个接口,它允许开发者创建...

Global site tag (gtag.js) - Google Analytics