站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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最好需要全局的.....


继续关注。


↑返回目录
前一篇: 【中午好好休息】请问如何将多个class文件打包成.jar文件
后一篇: 急!不能提交的问题,在线等