想对某几个网页进行监听,如用户访问了页面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值,多谢。 请高手出手指教,多谢。分不够可以再加
String n = (String)config.getServletContext().getAttribute("MY_NAME");
第一次得不到值,但第二次访问时可以得到,用什么方法可以在 doFilter方法中得到 jsp设的 attribute值,多谢。 请高手出手指教,多谢。分不够可以再加
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);
%>
比如现在有两个人在page1.jsp上浏览,那么page1.jsp显示为2
同时在page2.jsp上有4个人浏览,那么page2.jsp上显示为4?
是上面的情况么?对于flyingbird110() 的代码 应该是是对应于整个应用来说的吧....
记录的是应用的当前在线人数...应该是哪一种情况...情况1复杂点....
三个你需要用的东东:
第一: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正确性,呵呵....)就这些,你就判断吧...
当用户从page1.jsp 到 page2.jsp:
这个时候你需要把page1.jsp的次数减1吧,用sessionId(request.getSession().getId())获得request.getServletPath(),然后根据获得的 ServletPath再次获得次数,把这个次数减1。同时你再次用sessionId 和 request.getServletPath() 覆盖掉之前的ServletPath。这个处理的过程已经包括了 从外部网站 到 page1.jsp了