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

监听HTTP会话

阅读更多
  监听HTTp会话是利用Servlet监听程序。结合监听技术,来讨论获得当前平台中用户总数的方法。
在Web应用中,可以监听HTTP会话活动情况、HTTP会话中属性的设置情况,也可以监听HTTP会话的active、passivate情况等
可以通过HttpSessionListener接口监听HTTP会话创建、销毁的信息;通过HttpSessionActivationListener监听HTTP会话的active、passivate情况;通过HttpSessionBindingListener监听HTTP会话中对象的绑定信息;通过HttpSessionAttributeListener监听HTTP会话中属性的设置请求。
下面看个实例
  package com.test.ch9;
  import java.util.Hashtable;
  import java.util.Iterator;
  import javax.servlet.http.HttpSession;
  import javax.servlet.http.HttpSessionEvent;
  import javax.servlet.http.HttpSessionListener;

  public class SessionListener implements HttpSessionListener{
  //集合对象,保存session对象的引用
  static Hashtable ht=new Hashtable();

  //实现HttpSessionListener接口,完成session创建事件控制
  public void sessionCreated(HttpSessionEvent arg0){
   HttpSession session=arg0.getSession();
   ht.put(session.getId(),session);
   System.out.println("create session:"+session.getId());
  }

  //实现HttpSessionListener接口,完成session销毁事件控制
  public void sessionDestroyed(HttpSessionEvent arg0){
   HttpSession session=arg0.getSession();
  System.out.println("destory session:"+session.getId());
   ht.remove(session.getId());
  }

  // 返回全部session对象集合
 static public Iterator getSet(){
  return ht.values().iterator();
  }
//依据session id返回指定的session对象
static public HttpSession getSession(String sessionId){
  return (HttpSession)ht.get(sessionId);
 }
}

该实例中,SessionListener实现了HttpSessionListener接口。SessionListener类还有一个属性,就是Hashtable用来保存所有的登录信息。当创建一个Session时,就调用sessionCreate()方法将登陆会话信息保存到Hashtable中;当销毁有关Session时,就调用sessionDestroyed()方法将登陆会话信息从Hashtable中移除,这样就实现了管理在线用户登录会话信息的目的。
  我们还需要几个页面程序来测试这个监听器的工作并且深入体会下Session的会话管理机制。
测试程序如下:
 <%@ page contentType="text/html;charset=gb2312"%>
 <%
   String strName=null;
   String strThing=null;
   try{
   strName=request.getParameter("name");
   strThing=request.getParameter("thing");
   if((strName==null)||(strName.length()==0)){
       throw new Exception("null strName");
         }
   if((strThing==null)||(strThing.length()==0))
      throw new Exception("null strThing");
      session.setAttribute("name","strName");
      session.setAttribute("thing","strThing");
      response.sendRedirect("display.jsp");
      }
  catch(Exception e){}
  %>
<html>
 <head>
  <title>会话管理</title>
 </head>
 <body>
 <center>会话管理实例</center>
 <form action="" method="post">
    <table>
       <tr>
          <td>名称:</td>
          <td><input name="name" type="input"/></td>
      </tr>
     <tr>
          <td>事件:</td>
          <td><input name="thing" type="input"/></td>
      </tr>
      <tr>
          <td align="right"></td>
          <td align="right">
            <button type="submit">提交</button>
            <button type="reset">重置</button>
          </td>
      </tr>
    </table>
 </form>
 </body>
</html>

当访问index.jsp时会出现一个类似登录框的会话描述页面,输入会话描述后进入display.jsp显示刚才输入的会话信息。
例如
 <%@ page language="java" pageEncoding="GB2312"%>
 <!DOCTYPE HTML PUBLIC"-//w3c//dtd html 4.0 transitional//en">
 <html>
   <head>
    <title>会话控制显示</title>
   </head> 
  <body bgcolor="#FFFFFF">
    <%
       if(session.isNew()==true){
          response.sendRedirect("index.jsp")
          }
     out.println("name:"+session.getAttribute("name")+"<br>");
     out.println("thing:"+session.getAttribute("thing")+"<br>");
     out.println("session id:"+session.getId()+"<br>");
     out.println("create time:"+session.getCreateTime());
    %>
 <form>
   <table>
       <tr>
           <td><a href="session.jsp">管理</a></td>
           <td><a href="logout.jsp">注销</a></td>
       </tr>
   </table>
 </form>
  </body>
 </html>

单击管理会进入会话关联页面(session.jsp)单击“注销”会进入会话注销页面(logout.jsp)是HTTP会话无效,
例如:会话关联的程序
 <%@ page language="java" pageEncoding="GB2312"%>
 <%@ page import="com.test.ch9.*, java.util.*"%>
 <!DOCTYPE HTML PUBLIC"-//w3c//dtd html 4.0 transitional//en">
 <html>
   <head>
    <title>Manager session JSP</title>
   </head>
   <body bgcolor="#FFFFFF">
   会话管理
   <br>
  <table border="1">
   <tr bgcolor="yellow">
    <td>会话Id</td>
    <td>用户名</td>
    <td>事件</td>
    <td>创建时间</td>
    <td>操作</td>
   </tr>
   <%
      Iterator iterator=SessionListener.getSet();
      while(iterator.hasNext()){
        try{
             HttpSession session1=(HttpSession)iterator.next();
             out.println("<tr>");
             out.println("<td>"+session1.getId()+"</td>")
             out.println("<td>"+session1.getAttribute("name")+"</td>");
             out.println("<td>"+session1.getAttribute("thing")+"</td>")
            out.println("<td>"+session1.getCreationTime()+"</td>");
%>
<td><a href='end.jsp?sessionid=<%=session1.getId()%>'>销毁</a></td>
<%
  out.println("</tr>");
  System.out.println("sessionId"+session1.getId());
            }
         catch(Exception ex){
      ex.printStackTrace();
      return;
          }
        }
      %>
  </table>
   </body>
 </html>

注销会话的程序(logout.jsp)
   <%@ page language="java" pageEncoding="GB2312"%>
   <!DOCTYPE HTML PUBLIC"-//w3c//dtd html 4.0 transitional//en">
   <html>
      <head>
       <title>会话控制</title>
      </head>
   <body bgcolor="#FFFFFF">
       <%
         if(session.isNew()!=true){
             session.invalidate();
            }
          response.sendRedirect("index.jsp");
          %>
   </body>
   </html>

如果单击“销毁”,则可以强制将会话信息移除如下
   <%@ page language="java" pageEncoding="GB2312"%>
   <%@ page import="com.test.ch9.*, java.util.*"%>
   <!DOCTYPE HTML PUBLIC"-//w3c//dtd html 4.0 transitional//en">
  <html>
      <head>
       <title>LL JSP</title>
      </head>
   <body bgcolor="#FFFFFF">
       <%
           //关闭会话,释放资源
         try{
             String strSid=request.getParameter("sessionid");
             HttpSession session1=SessionListener.getSession(strSid);
               if(session!=null){
                session1.invalidate();
                  }
              }
         catch(Exception e){
          e.printStackTrace();
             }
        response.sendRedirect("session.jsp");
          %>
   </body>
   </html>

最后将监听器部署到web.xml中去。如下
   <web-app>
      <listener>
          <listener-class>com.test.ch9.SessionListener</listener-class>
      </listener>
   </web-app>
分享到:
评论

相关推荐

    servlet监听器案例

    3. **HttpSessionListener**:用于监听HTTP会话的创建和销毁事件,有助于管理会话状态,如记录用户登录状态、会话超时提醒等。 配置Servlet监听器通常在"web.xml"部署描述符文件中进行。以下是一个简单的例子: ``...

    一个简单的监听器案例项目

    2. HttpSessionListener: 这个接口允许开发者监听HTTP会话的创建和销毁。在用户首次访问应用并创建会话时,sessionCreated()方法会被调用;当会话过期或者显式调用invalidate()方法时,sessionDestroyed()方法会被...

    Java的监听器种类.pdf

    - HttpSessionListener:监听HTTP会话的创建和销毁: - sessionCreated(HttpSessionEvent): 用户新建会话时调用。 - sessionDestroyed(HttpSessionEvent): 用户会话结束或超时时调用。 - ...

    Java Web应用开发 53 课堂案例-应用监听器统计在线人数.docx

    `HttpSessionListener`是Java Servlet API的一部分,它允许开发者监听HTTP会话的创建和销毁事件,从而统计在线人数。 首先,我们需要创建一个简单的Java程序来存储和管理在线人数。这个程序叫做`OnlineCounter.java...

    监听器显示登陆用户列表,并实现踢人功能

    `HttpSessionAttributeListener`是Servlet规范定义的一种监听器接口,它允许我们监听HTTP会话中的属性变化。通过实现这个接口,我们可以捕获用户登录、注销等与会话相关的事件,从而动态维护登录用户列表,并在需要...

    Servlet监听器例子

    最后,`HttpSessionAttributeListener`接口允许我们监听HTTP会话中属性的变化。例如,当添加、移除或替换属性时,我们可以接收到通知。这在需要跟踪会话状态变化的场景中非常有用。实现该接口的方法有`...

    listener监听器demo

    例如,`HttpSessionListener`可以监听HTTP会话的创建和销毁,而`ServletContextListener`则可以在Web应用启动和停止时执行初始化和清理工作。以下是一个简单的`HttpSessionListener`示例: ```java @WebListener ...

    web LIstener

    其次,`HttpSessionListener`接口允许你监听HTTP会话的创建和销毁。在大型的Web应用中,管理会话是非常关键的,因为会话存储了用户的个人信息和状态。当用户首次访问网站并创建会话时,`sessionCreated`方法会被调用...

    spring监听器

    `DelegatingFilterProxy`用于代理其他过滤器,以及各种监听器如`HttpSessionListener`、`ServletContextListener`等,用于监听HTTP会话和Web应用上下文的生命周期事件。 - **日志记录与调试**:描述中还提到了日志...

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

    1. **HttpSessionListener**:这个接口用于监听HTTP会话的创建和销毁。你可以实现这个接口,当新的会话创建时,系统会调用sessionCreated()方法,会话销毁时调用sessionDestroyed()方法。这在管理会话跟踪和资源分配...

    servlet监视器

    2. **HttpSessionListener**:用于监听HTTP会话的创建和销毁事件。 3. **ServletRequestListener**:用于监听HTTP请求的初始化和销毁事件。 4. **其他更具体的监听器**:如**HttpSessionAttributeListener**(监听...

    HttpSessionListener 和HttpSessionBindingListener的区别 单点登录

    在Java Web开发中,`HttpSessionListener`和`HttpSessionBindingListener`都是用于监听HTTP会话生命周期的重要接口。它们分别用于不同的场景,并且有着各自特定的功能。了解这两种监听器的区别对于实现单点登录等...

    Servlet中的八大Listener

    - **作用**:用于监听HTTP会话中的属性变化情况。 5. **HttpSessionActivationListener** - **事件方法**: - `sessionDidActivate()`:在会话激活时调用。 - `sessionWillPassivate()`:在会话钝化前调用。 ...

    S07-tomcat之Listener内存马1

    除了`ServletRequestListener`之外,还有许多其他类型的监听器,例如`ServletContextListener`用于监听上下文的初始化和销毁,`HttpSessionListener`用于监听HTTP会话的创建和结束等。每个监听器都有其特定的生命...

    Birt API 研究

    `ViewerHttpSessionListener` 负责监听HTTP会话事件,确保每个用户的报表请求都在各自的会话中独立处理。 - **作用**:管理用户的会话状态,确保每个用户都有独立的数据环境。 - **关键步骤**: - 创建新的会话时...

    JForum Source Analysis JForum开源论坛的源码分析

    - **监听器**:`ForumSessionListener` 实现了 `HttpSessionListener` 接口,用于监听HTTP会话的创建和销毁事件,特别是当一个会话结束时,该监听器会负责清理与该会话相关的数据。 - **过滤器**:`...

    java毕业设计&课设-OA办公自动化项目(四套)(视频+源码).doc

    - **监听器(Listener)**: 监听特定事件的发生,并作出相应的处理,如监听HTTP会话的创建与销毁。 ##### 3. 数据库操作 - **JDBC**: Java访问数据库的标准接口,通过它可以执行SQL语句,实现对数据库的操作。 - **...

Global site tag (gtag.js) - Google Analytics