我已经在我的网络应用上实施了SessionListener
来计算会话数。我有setMaxInterval(60)
,我的问题如下:如果会话到期,会话计数器设置为0,如果我再次开始在网页上导航,会话计数器不会递增。为什么不呢?
public class SessionListener implements HttpSessionListener {
static int counter = 0;
public void sessionCreated(HttpSessionEvent e)
{
HttpSession s = e.getSession();
s.setMaxInactiveInterval(60);
counter++;
synchronized(s.getServletContext())
{
s.getServletContext().setAttribute("allConnections", counter);
}
}
public void sessionDestroyed(HttpSessionEvent e)
{
HttpSession s = e.getSession();
counter--;
synchronized(s.getServletContext())
{
s.getServletContext().setAttribute("allConnections", counter);
}
}
然后,每个JSP在application.getAttribute("allConnections")
答案 0 :(得分:1)
这是因为对象中的计数器变量是特定于会话的(您将它作为属性或类似的东西存储在会话对象中)
您的解决方案(您选择): - 将计数器放在Application上下文/范围内(或在该范围内的单个对象中) - 使计数器变量静态(如果它在你的监听器中)
问题更新后编辑 在创建会话时,会话属性被设置一次。这意味着只会为任何给定的会话显示初始值(创建会话时适用的值)。
必须在呈现显示计数器的页面的每个请求上读取该值。你有几个选择:
SessionListener
类中提供静态getter,则JSP / servlet可以直接读取该值答案 1 :(得分:0)
根据此指令的值,加载JSP可能会也可能不会创建会话:
not installed