只有在
之后才能创建java servlet中的HttpSessionHttpSession s = request.getSession();
在我的代码中我没有写那个,但是当我使用if (request.getSession(false) == null) ...
时,它不起作用。为什么呢?
答案 0 :(得分:17)
调用request.getSession()时会创建一个HttpSession。
但如果您默认访问JSP,它将自动创建会话。可以使用以下命令禁用此行为:<%@ page session="false">
您使用的是JSP吗?
答案 1 :(得分:15)
阅读JavaDocs,它清楚地说:
返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。
另一个变体request.getSession(isCreate)
返回与此请求关联的当前HttpSession,如果没有当前会话且create为true,则返回新会话。
如果create为false且请求没有有效的HttpSession,则此方法返回null。
要确保正确维护会话,必须在提交响应之前调用此方法。如果容器使用cookie来维护会话完整性,并且在响应提交时要求创建新会话,则抛出IllegalStateException。
更新
在一点研究中,我发现除非request.getSession()
被称为某处,否则会创建 。因为,The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
默认情况下,您的Servlet容器很有可能为您创建会话。
参阅:
但是,为了更安全,请使用request.getSession()
来获取会话,并仅在需要验证是否已创建会话时使用request.getSession(false)
。
答案 2 :(得分:3)
除了Nishant的答案之外,会话可以由JSP页面隐式创建,除非您将它们配置为不使用<%@ page session = "false" %>
创建会话。
答案 3 :(得分:1)
要完成它:
request.getSession()
,否则不会创建request.getSession(false)
来获取现有会话而不创建新会话session
- 除非您指定<%@ page session="false" %>
session.isNew()
查找是否已重新创建答案 4 :(得分:0)
尝试从浏览器中删除会话Cookie并进行其他测试。如果它不起作用,则其他组件在该调用之前创建一个新会话。