`
cuker919
  • 浏览: 90349 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Listener Servlet的应用

 
阅读更多

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

    我们看具体的代码,见示例14-9。

    【程序源代码】

    1	// ==================== Program Discription =====================
    2 // 程序名称:示例14-9 : EncodingFilter .java
    3 // 程序目的:学习使用监听器
    4 // ==============================================================
    5 import javax.servlet.http.*;
    6 import javax.servlet.*;
    7
    8 public class OnLineCountListener implements HttpSessionListener,
    ServletContextListener,ServletContextAttributeListener
    9 {
    10 private int count;
    11 private ServletContext context = null;
    12
    13 public OnLineCountListener()
    14 {
    15 count=0;
    16 //setContext();
    17 }
    18 //创建一个session时激发
    19 public void sessionCreated(HttpSessionEvent se)
    20 {
    21 count++;
    22 setContext(se);
    23
    24 }
    25 //当一个session失效时激发
    26 public void sessionDestroyed(HttpSessionEvent se)
    27 {
    28 count--;
    29 setContext(se);
    30 }
    31 //设置context的属性,它将激发attributeReplaced或attributeAdded方法
    32 public void setContext(HttpSessionEvent se)
    33 {
    34 se.getSession().getServletContext().
       setAttribute("onLine",new Integer(count));
    35 }
    36 //增加一个新的属性时激发
    37 public void attributeAdded(ServletContextAttributeEvent event) {
    38
    39 log("attributeAdded('" + event.getName() + "', '" +
    40 event.getValue() + "')");
    41
    42 }
    43
    44 //删除一个新的属性时激发
    45 public void attributeRemoved(ServletContextAttributeEvent event) {
    46
    47 log("attributeRemoved('" + event.getName() + "', '" +
    48 event.getValue() + "')");
    49
    50 }
    51
    52 //属性被替代时激发
    53 public void attributeReplaced(ServletContextAttributeEvent event) {
    54
    55 log("attributeReplaced('" + event.getName() + "', '" +
    56 event.getValue() + "')");
    57 }
    58 //context删除时激发
    59 public void contextDestroyed(ServletContextEvent event) {
    60
    61 log("contextDestroyed()");
    62 this.context = null;
    63
    64 }
    65
    66 //context初始化时激发
    67 public void contextInitialized(ServletContextEvent event) {
    68
    69 this.context = event.getServletContext();
    70 log("contextInitialized()");
    71
    72 }
    73 private void log(String message) {
    74
    75 System.out.println("ContextListener: " + message);
    76 }
    77 }

    【程序注解】
    在OnLineCountListener里,用 count代表当前在线的人数,OnLineCountListener将在Web服务器启动时自动执行。当OnLineCountListener构造 好后,把count设置为0。每增加一个Session,OnLineCountListener会自动调用 sessionCreated(HttpSessionEvent se)方法;每销毁一个Session,OnLineCountListener会自动调用 sessionDestroyed(HttpSessionEvent se)方法。当调用sessionCreated(HttpSessionEvent se)方法时,说明又有一个客户在请求,此时使在线的人数(count)加1,并且把count写到ServletContext中。 ServletContext的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。

    为了使监听器生效,需要在web.xml里进行配置,如下所示:

    <listener>
    <listener-class>OnLineCountListener</listener-class>
    </listener>

    测试程序:

    <%@ page contentType="text/html;charset=gb2312" %>

    目前在线人数:

    <font color=red><%=getServletContext().getAttribute("onLine")%></font><br>

    退出会话:

    <form action="exit.jsp" method=post>
    <input type=submit value="exit">
    </form>

    getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用

    <%session.invalidate() ;%>

    使Session失效,这样监听器就会使count减1。

    【运行程序】
    web.xml做好以上的配置,把 OnLineCountListener放在WEB-INF/class目录下,启动Web服务器,在浏览器里输入以下URL(根据具体情况不 同):http://127.0.0.1:8080/ch14/listener.jsp

    浏览器将会打印目前在线人数。在服务器端有以下输出:


    ContextListener: contextInitialized()
    ContextListener: attributeReplaced('org.apache.
    catalina.WELCOME_FILES', '[Ljava.lang.String;@1d98a')

    ContextListener: attributeAdded('onLine', '1')
    ContextListener: attributeReplaced('onLine', '1')
    ContextListener: attributeReplaced('onLine', '0')
    ContextListener: attributeReplaced('onLine', '1')
    ContextListener: attributeReplaced('onLine', '2')
  • 分享到:
    评论

    相关推荐

      JSPservlet中web.xml详细配置指南(包含所有情况)

      其中,context-param 配置节用于提供应用程序上下文信息,listener 配置节用于定义事件监听程序,filter 配置节用于定义过滤器,而 servlet 配置节用于定义 servlet。 context-param 配置节 --------------------- ...

      JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

      本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

      JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

      本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

      java web实验报告;开发环境及web基础, JSP、Servlet及JDBC、扩展JavaScript框架、Web应用综合设计

      实验1:Java Web开发环境及Web编程基础;实验2 JSP、Servlet及JDBC应用开发;实验3 扩展JavaScript框架应用;实验4 Web应用综合设计; 天津理工大学

      JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

      本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

      java listener监听器教程及实例

      我们在编写JSP/Servle程序时,有相应的事件处理机制,在JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时呼叫特定的实现Listener的类。

      JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

      本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

      Java™ Servlet 规范.

      1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

      ServletContextListener的应用

      ServletContextListener的应用案例 项目启动:创建新的空表, 项目关闭:删除表 百度六祎,期...

      Tomcat中用web.xml控制Web应用详解

      Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...

      Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

      第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...

      基于Servlet3.0+IBatis+BootStrip技术构建简单会议管理系统

      第04课 servlet3.0新特性之@WebFilter_@WebListener 第05课 JQuery AJAX 注册验证+二级菜单(JSON) 第06课 mybatis 框架搭建 第07课 mybatis 增删改查 第08课 mybatis 动态sql 第09课 bootstrap的搭建+栅格系统+...

      JSP Web.xml标准配置内容

      WEB.XML标准配置注解: &lt;!--Servlet的映射,用来说明客户端IE中输入什么样的地址字符串对应到哪个Servlet的别名--&gt; ...--定义了Web应用程序中会话的超时时限--&gt; &lt;session-timeout&gt;10 &lt;/session-config&gt;

      Servlet3.1规范(最终版) PDF

      1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................

      Spring MVC 框架应用实例

      &lt;servlet-name&gt;ideawu&lt;/servlet-name&gt; &lt;servlet-class&gt; org.springframework.web.servlet.DispatcherServlet &lt;/servlet-class&gt; &lt;load-on-startup&gt;1 &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;...

      Web应用与开发作业

      1、Filter的理解和应用 实现一个禁止缓存的过滤器。 要求和提示: (1)禁止浏览器缓存所有...3、Listener的理解和应用 通过监听器记录在线用户的姓名,在页面进行用户姓名的显示,同时实现对某个用户的强制下线功能。

      webservice服务中WSServletContextListener监听器所需要的jar包

      解决异常:Error configuring application listener of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener java.lang.ClassNotFoundException: ...

      Spring中ApplicationContext加载机制

      这两者在功能上完全等同,只是一个是基于 Servlet2.3 版本中新引入的 Listener 接口实现,而另一个基于 Servlet 接口实现。开发中可根据目标 Web 容器的实际情况进行选择。 配置非常简单,在 web.xml 中增加相应的...

      Java优化编程(第2版)

      7.2.1 提高servlet应用性能的七个方法 7.2.2 合理缓冲静态数据与动态数据 7.2.3 改善servlet应用性能的方法 7.2.4 filter servlet与listener servlet 小结 第8章 开发高性能的ejb应用 8.1 采用ejb技术的必要性 8.1.1...

      web.xml标签说明.docx

      Web.xml 文件标签说明 Web.xml 文件是 Java Web 应用程序的配置文件,用于...如果这个值是正数或者 0,容器将在 Web 应用程序部署时加载和初始化这个 servlet,并且先加载数值小的 servlet,后加载数值大的 servlet。

    Global site tag (gtag.js) - Google Analytics