想对某几个网页进行监听,如用户访问了页面page1.jsp时,页面能够显示 同时访问该页面的其它用户数,而访问page2.jsp时,页面能够显示同时访问page2.jsp页面的其它用户数。请问该怎么实现此类功能,给个实现代码,不胜感激!!     另,监听器和过虑器能配合一起使用么?如可以的话,在web.xml中该如何配置?    有一个监听器,监听jsp文件,想在监听时得到jsp文件中所设的值,如在文件中设置了     getServletContext().setAttribute("MY_NAME", "TEST"); 在监听器doFilter 方法中,用
     String n = (String)config.getServletContext().getAttribute("MY_NAME");
第一次得不到值,但第二次访问时可以得到,用什么方法可以在 doFilter方法中得到 jsp设的 attribute值,多谢。   请高手出手指教,多谢。分不够可以再加

解决方案 »

  1.   

    Filter是在请求到达jsp之前对request进行处理的当然第一次取不到值
      

  2.   

    首先编写一个session监听类,实作HttpSessionListener接口,它的作用是计算当前有多少个在线用户:
    import javax.servlet.*; 
    import javax.servlet.http.*; public class SessionCount implements HttpSessionListener 

    private static int count=0; public void sessionCreated(HttpSessionEvent se) 

    count++; 
    System.out.println(“session创建:”+new java.util.Date()); 
    } public void sessionDestroyed(HttpSessionEvent se) 

    count--; 
    System.out.println(“session销毁:”+new java.util.Date()); 
    } public static int getCount() 

    return(count); 

    } 然后在web.xml中声明这个监听器:<listener>
    <listener-class>
    org.bromon.test.SessionCount
    </listener-class>
    </listener>编写一个测试页面test.jsp,内容是获得count:
    <%
    int count=org.bromon.test.SessionCount.getCount();
    out.println(count);
    %>
      

  3.   

    具体的问题是什么?
    比如现在有两个人在page1.jsp上浏览,那么page1.jsp显示为2
    同时在page2.jsp上有4个人浏览,那么page2.jsp上显示为4?
    是上面的情况么?对于flyingbird110() 的代码 应该是是对应于整个应用来说的吧....
    记录的是应用的当前在线人数...应该是哪一种情况...情况1复杂点....
      

  4.   

    to NsGFr(elan):是第一种情况。
      

  5.   

    给你说个思路吧:
    三个你需要用的东东:
    第一:request.getServletPath()
    第二:在sessionCreated的时候,为这个用户产生唯一的id,暂时称作sessionId吧。
    第三:你需要的人数map1:当sessionCreated的时候你用map把sessionId和request.getServletPath()关联起来。
    map2: 把request.getServletPath()和次数关联起来这里有多种情况:
    当用户从page1.jsp 到 page2.jsp:
           这个时候你需要把page1.jsp的次数减1吧,session获得request.getServletPath(),然后根据获得的ServletPath再次获得次数,把这个次数减1。同时你再次用sessionId 和 request.getServletPath() 覆盖掉之前的ServletPath。
    当用户从page1.jsp 关闭浏览器的时候:这个不必多说了吧sessionDestroyed方法当用户从page1.jsp 到另外一个网站的时候
    其实这个你不必担心,因为如果用户不在这个网站了,session超时了,就会触发sessionDestroyed方法,呵呵,这个可以不必处理。(其实你可以定义一个策略,定时检查map1和map2正确性,呵呵....)就这些,你就判断吧...
      

  6.   

    -----------------迷糊了
    当用户从page1.jsp 到 page2.jsp:
    这个时候你需要把page1.jsp的次数减1吧,用sessionId(request.getSession().getId())获得request.getServletPath(),然后根据获得的 ServletPath再次获得次数,把这个次数减1。同时你再次用sessionId 和 request.getServletPath() 覆盖掉之前的ServletPath。这个处理的过程已经包括了 从外部网站 到 page1.jsp了
      

  7.   

    map1 和 map2最好需要全局的.....