package BookStore;
import java.util.*;
import javax.servlet.http.*;public class BookStoreSessionListener extends HttpServlet implements HttpSessionListener
{
private static int intSessionsCount = 0;
public void sessionCreated(HttpSessionEvent e)
{
HttpSession session = e.getSession();
if(session!=null)
{
intSessionsCount++;
}
Integer ing = new Integer(getSessionsCount());
session.setAttribute("count",ing);
session.setAttribute(Utils.SHOPPING_CART,new ShoppingCart());
}
public void sessionDestroyed(HttpSessionEvent e)
{
HttpSession session = e.getSession();
if(session!=null)
{
if(intSessionsCount > 0) intSessionsCount--;
}
session.removeAttribute(Utils.SHOPPING_CART);
}
public static int getSessionsCount()
{
return intSessionsCount;
}
}这是一个购书项目,我想做在线人数的显示(来1个+1个人,走了1个-1个人那样),不过只增不减,也就是说destroy方法没调用到,我不明白是什么原因(帮忙改一下上面的代码和写JSP中的调用代码)
import java.util.*;
import javax.servlet.http.*;public class BookStoreSessionListener extends HttpServlet implements HttpSessionListener
{
private static int intSessionsCount = 0;
public void sessionCreated(HttpSessionEvent e)
{
HttpSession session = e.getSession();
if(session!=null)
{
intSessionsCount++;
}
Integer ing = new Integer(getSessionsCount());
session.setAttribute("count",ing);
session.setAttribute(Utils.SHOPPING_CART,new ShoppingCart());
}
public void sessionDestroyed(HttpSessionEvent e)
{
HttpSession session = e.getSession();
if(session!=null)
{
if(intSessionsCount > 0) intSessionsCount--;
}
session.removeAttribute(Utils.SHOPPING_CART);
}
public static int getSessionsCount()
{
return intSessionsCount;
}
}这是一个购书项目,我想做在线人数的显示(来1个+1个人,走了1个-1个人那样),不过只增不减,也就是说destroy方法没调用到,我不明白是什么原因(帮忙改一下上面的代码和写JSP中的调用代码)
测试的时候,如果session生命周期还没有到,为使session被销毁,要关闭那个浏览窗口。另外,HttpSessionListener是线程安全的么?不需要自己做串行化处理么?
打印出东西,证明没有调用到destory方法,但是在线人数的具体代码怎么写呢?给我个提示也好啊
Listener lis=new Listener(userlog);
session.setAttribute("listener",lis) ;当session销毁的时候,就会执行下面的代码
import javax.servlet.http.*;
import com.bxsys.hibernate.Userlogonlog;
import com.bxsys.userlog.*;public class Listener implements HttpSessionBindingListener{
private Userlogonlog userlog; public Listener(Userlogonlog userlog){
this.userlog =userlog;
}
public void valueBound(HttpSessionBindingEvent se){ }
public void valueUnbound(HttpSessionBindingEvent se){
try{
bxsyslog syslog = new bxsyslog();//session销毁是执行的代码
syslog.userLogout(this.userlog);//session销毁是执行的代码
}catch(Exception e){}
}}