【发布时间】:2012-10-18 14:28:11
【问题描述】:
我是这个论坛的新手。我正在设计一个 JSP-Servlet 应用程序并使用会话变量来存储对象。 问题是,当我第二次访问会话变量时,它返回 null。 这是我的应用程序的流程 -
我有一个带有多个链接按钮的 jsp 页面。当用户单击任何按钮时,将使用相应的参数调用一个 servlet。例如,如果单击 button1,则传递 1,如果单击 button2,则传递 2,等等。
Servlet 从之前已经创建的会话变量中获取一个数组列表,并根据请求的参数从数组列表中获取数据,对其进行处理并将响应发送到另一个 jsp,例如 jsp2。
jsp2 也有类似的链接按钮,应该执行相同的任务。当从 jsp2 调用同一个 Servlet 或者即使页面被刷新时,这次 session 变量为 null。
在我的 web.xml 文件中的 session-config 标记下,我将超时设置为 -1,这样会话就永远不会过期。
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
在 servlet 中,我将会话变量作为 -
HttpSession session = request.getSession(false);
ArrayList<String> list = new ArrayList<String>();
list = (ArrayList<String>)session.getAttribute("mylist");
当第二次调用 servlet 或刷新页面时,列表为空。 我放了几行代码来检查会话是否有效——它会第二次打印出来。
if(!request.isRequestedSessionIdValid()) {
System.out.println("Session is Expired !!");
}
而session.getAttribute("mylist") 返回NullPointerException。
我确信我没有在任何地方偶然使用session.invalidate() 来结束会话。
我不明白出了什么问题..有人可以解释一下吗?
非常感谢。
【问题讨论】: