servlet 监听器的实现

xiaoxiao2024-10-02  33

1.     Servlet listener 监听器

<1>概述

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理,激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1

 

编写监听器需要实现相应的接口

监听器需要在web.xml文件中配置

然而在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪

 

<2>常用的监听接口

1)        ServletContextListener

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

 

2)        ServletContextAttributeListener

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

 

3)        HttpSessionListener

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

 

4)        HttpSessionAttributeListener

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

 

下面来实现一个HttpSessionListener的实例。实现当前在线人数。方法如下:

1 建一个类用来记录在线人数代码如下:

public class OnlineCounter {

 private static Long onlineCount = 0L;

 public static Long getOnlineCount() {  return onlineCount; }  public static void raise(){  onlineCount++;//加一个人数 }  public static void reduce(){  onlineCount--;//减一个人数 } }

 

建一个类并实现HttpSessionListener接口 代码如下:

   

import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;

public class OnlineCounterListener implements HttpSessionListener {

 /**  * session 对象创建时被调用  */ public void sessionCreated(HttpSessionEvent arg0) {  // TODO Auto-generated method stub    OnlineCounter.raise(); }

 /**  * session 对象销毁时被调用  */ public void sessionDestroyed(HttpSessionEvent arg0) {  // TODO Auto-generated method stub  OnlineCounter.reduce(); }

}

 

在写上后要在xml文件里注册这个监听器如下:

  <listener>       <listener-class>com.listener.OnlineCounterListener</listener-class> </listener>

 

3 下面写的是一个servlet类用于当用户离开时销毁当前用户的session对象。因为客户端和服务器的连接是没有状态的。服务器是通过判断客户隔多少时间没有访问session就失效。

当你退出ie你的当前前前session并没有销毁。所以写以下一个类。用于销毁session。当你退出ie.就把session销毁。使在线人数变得更准确。代码如下:

 

 import java.io.IOException;import java.io.PrintWriter;

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

public class ExitServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {

  doPost(request,response); }

 public void doPost(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {    request.getSession().invalidate();//将将将session销毁  PrintWriter out=response.getWriter();//获得一个out输出  out.println("<script>window.close()</script>");//用于关闭ie }}

写完这个类之后不要忘了要在xml   注册这个servlet 代码如下:

 <servlet>    <description>This is the description of my J2EE component</description>    <display-name>This is the display name of my J2EE component</display-name>    <servlet-name>Exit</servlet-name>    <servlet-class>com.listener.Exit</servlet-class>  </servlet>

  <servlet-mapping>    <servlet-name>Exit</servlet-name>    <url-pattern>/servlet/Exit</url-pattern>  </servlet-mapping> 

 

4 就可以使用这个监听器了。如下简单的使用:

 <body>    当前在线人数为${requestScope.onlineCount}人    <a href="<%=request.getContextPath()%>/servlet/Exit" >退出</a>  </body>

 

发个言吧。随便写一句。你觉得那里还不足呢。。我是北京应用技术大学

 

相关资源:java web用servlet监听器实现显示在线人数
转载请注明原文地址: https://www.6miu.com/read-5017956.html

最新回复(0)