gpt4 book ai didi

Java/JSP/ session

转载 作者:行者123 更新时间:2023-12-01 09:53:25 25 4
gpt4 key购买 nike

我已经实现了一个 SessionListener 来对我的网络应用程序上的 session 进行计数。我有 setMaxInterval(60) ,我的问题如下:如果 session 过期, session 计数器将设置为 0,并且如果我再次开始在网页上导航, session 计数器不会增加。为什么不呢?

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")在前端显示计数器变量

最佳答案

这是因为对象中的计数器变量是特定于 session 的(您将其作为属性或类似内容存储在 session 对象中)

您的解决方案(您选择):- 将计数器放入应用程序上下文/范围(或该范围内的单例对象中)- 使计数器变量静态(如果它在您的监听器中)

问题更新后编辑 session 属性在创建 session 时设置一次。这意味着对于任何给定的 session ,只会显示初始值(创建 session 时适用的值)。

必须在呈现显示计数器的页面的每个请求上读取该值。为此,您有几种选择:

  • 如果您可以在 SessionListener 类中提供静态 getter,JSP/servlet 可以直接读取该值
  • 更好:您可以添加一个过滤器,将更新的计数器设置为请求范围中的属性。您只需确保过滤器在显示计数器的每个请求(jsp、servlet 等)上执行即可。

关于Java/JSP/ session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com