Java servlet - Session cleanup (HttpServletRequest)

2022-09-03 17:37:23

关于java servlet和处理请求的最佳方法的一般问题。如果我从远程服务器请求中点击我的doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
  ....
  <do work here>
  ....
  kill(request);
}

private void kill(HttpServletRequest request) {
//How do I kill the user session here?
}

在我处理请求并向请求者生成输出后,我想基本上“杀死”他们的会话。目前,该会话徘徊不前,从而消耗了内存。然后,一旦达到最大值,所有其他调用都将超时。

我尝试使用请求对象创建一个 HttpSession 对象,但得到了相同的结果:

HttpSession session = request.getSession();
session.invalidate();

答案 1
HttpSession session = request.getSession(false);
if (session != null) {
    session.invalidate();
}

是文档建议的正确方法。客户端发送新请求后,将创建一个新会话。

您提到您的会话仍占用内存。会话中是否有对这些对象的任何其他引用?

您可能还想看看:Servlet Session behavior 和 Session.invalidate


答案 2

您可以使用以下命令从会话中删除属性

session.removeAttribute("attribute name");

推荐