当前页面: 开发资料首页 → JSP 专题 → 【200分】:过虑器、监听器问题请教
【200分】:过虑器、监听器问题请教
摘要: 【200分】:过虑器、监听器问题请教
想对某几个网页进行监听,如用户访问了页面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值,多谢。
请高手出手指教,多谢。分不够可以再加
关注,帮顶一下
Filter是在请求到达jsp之前对request进行处理的
当然第一次取不到值
那有什么办法可以取得值呢?
首先编写一个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中声明这个监听器:
org.bromon.test.SessionCount
编写一个测试页面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复杂点....
to NsGFr(elan):是第一种情况。
第一种情况比较麻烦,高手给指点指点
帮顶。
给你说个思路吧:
三个你需要用的东东:
第一: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了
map1 和 map2最好需要全局的.....
继续关注。