关于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();
答案 0 :(得分:24)
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
是文档建议的正确方法。一旦客户端发送新请求,将创建一个新会话。
您提到您的会话仍会占用内存。您是否在会话中对这些对象有任何其他引用?
答案 1 :(得分:5)
您可以使用
从会话中删除属性session.removeAttribute("attribute name");
答案 2 :(得分:2)
尝试
session = request.getSession(false); // so if no session is active no session is created
if (session != null)
session.setMaxInactiveInterval(1); // so it expires immediatly
答案 3 :(得分:1)
如果您不想要会话行为,即在多个请求之间具有状态。为什么要创建/使用会话。不要创建会话或不在会话中存储任何内容。
要确保您的代码不使用会话,请编写一个覆盖getSession()
方法的请求包装器。
答案 4 :(得分:0)
在web.xml中设置超时期限