我有两个问题,
当JSP有<%@page session="false" %>
时,我是否可以使用JSTL标记访问会话范围的变量。在我的Web应用程序中,我在登录时使用request.getSession()
从servlet创建一个新会话,然后设置属性。但是我的JSP页面不包含<%@ page session="false" %>
,我使用JSTL标记来显示存储在会话和请求中的数据。调试后,我可以看到新的会话是随机创建的。如果我将<%@ page session="false" %>
添加到JSP页面以确保不创建新会话,是否会产生任何影响?
另外,我在web.xml中设置了15分钟的超时时间。通常,如果超过15分钟不活动,我的应用程序会超时。但偶尔会在1或2分钟内超时。我不理解这种奇怪的行为。这与创建的新会话有关吗?当它超时时,我已经看到创建了具有不同会话ID的新会话。在我的代码中,我检测到超时如下,
if (request.getRequestedSessionId() != null
&& !request.isRequestedSessionIdValid()) {
// redirect to a login page with a message
}
答案 0 :(得分:0)
当您在JSP中编写指令<%@page session="false" %>
时,它会从其自动生成的servlet的java源代码中取出行HttpSession session = request.getSession();
。所以不,如果您没有首先获取会话信息,则无法访问页面中的会话信息。
如果它在比web.xml中设置的时间更长的时间后超时,那就没关系,但如果超时则超时。您的应用中必定存在一些您没有想到的内容,例如在某处调用session.invalidate()
。