为什么我们需要request.getSession(true)?

时间:2014-09-09 01:43:50

标签: servlets httpsession

当我第一次开始学习J2EE时,我被告知,我们需要调用request.getSession(true)来创建一个新会话。但是当我开始测试HttpSessionListener时,我发现servlet容器一旦收到来自客户端的Http请求就会创建一个HttpSession - 在我明确尝试创建任何会话之前。 servlet容器是否隐式调用request.getSession()request.getSessioin(true)来创建一个新会话?

我发现getSession(true)有用的唯一情况是我想显式地使现有会话无效并创建一个新会话。这是唯一真实世界的场景还是有其他例子?

1 个答案:

答案 0 :(得分:0)

  

但是当我开始测试HttpSessionListener时,我发现servlet容器会在收到来自客户端的Http请求后立即创建一个HttpSession - 在我明确尝试创建任何会话之前

我不知道你是如何测试的,但不幸的是,事实并非如此。尝试创建非常简单的servlet并放在那里:

System.out.println("Session: " + request.getSession(false));

您会看到该会话为null。如果您的应用程序未请求Container,则Container不会创建会话。

您可能会测试jsp页面或某些框架的印象,默认情况下会创建会话。但如果您的网页不需要会话,也可以使用<%@ page session="false" %>停用此功能。

关于request.getSession(true)的需要 - 您可以说它不需要,因为request.getSession()完全相同,但是如果有与之关联的有效会话,则需要request.getSession(false)来检查请求。