当我第一次开始学习J2EE时,我被告知,我们需要调用request.getSession(true)
来创建一个新会话。但是当我开始测试HttpSessionListener
时,我发现servlet容器一旦收到来自客户端的Http请求就会创建一个HttpSession - 在我明确尝试创建任何会话之前。 servlet容器是否隐式调用request.getSession()
或request.getSessioin(true)
来创建一个新会话?
我发现getSession(true)
有用的唯一情况是我想显式地使现有会话无效并创建一个新会话。这是唯一真实世界的场景还是有其他例子?
答案 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)
来检查请求。