【发布时间】:2015-09-25 03:12:00
【问题描述】:
我有一个运行 localhost 的旧版 Java 1.6 和 Tomcat 7 应用程序,使用 JSP 页面、带有框架的框架集、javascript,但没有像 Struts 这样的框架。我使用请求或会话从 servlet 传递一个对象以显示在页面中,并且效果很好。
但是,我最近做了一些更改,现在我无法从会话或请求中检索相同的对象。它以前一直工作正常,所以我不确定是什么坏了,但我什至不能将字符串值从 JSP 发送回 servlet。
我创建了一个新的精简 JSP,但无论使用请求还是会话,我都无法从中获得任何回报。当我将代码推送到我们的 Tomcat 6 Web 服务器时,它也会做同样的事情。使用调试器,我看到了会话中填充的对象,但随后在每次创建新会话时丢失了,就像使用这个简单的代码获取 sessionid 一样:
System.out.println("The session id is: " + session.getId());
会话 ID 为:EB431C19B41957B2BB2EFC3DBAF32241
会话ID为:C9CBD30E84D5C93DF6114C1412AE5523 然后我在 Header 下的 firebug 中看到了这个,response headers:
设置-Cookie JSESSIONID=C9CBD30E84D5C93DF6114C1412AE5523; Path=/此处省略名称/; HttpOnly,
所以我知道 cookie 已设置。我还删除了 jquery,并尽可能地剥离了 jsp 代码,但这似乎不是问题。
我正在使用: HttpSession 会话 = request.getSession(true);但使用 false 没关系。
session.setAttribute("ObjNameList", objNameList);
context.xml 的 cookie 设置为 true,我们确实使用 response.sendRedirect,但前提是抛出错误,如:response.sendRedirect("Error.jsp"); 代码中也没有会话无效的位置。
我在 jsp 中所做的只是使用类似的方式发回一个表单:
document.formName.submit(); 工作正常。使用此代码尝试在会话中设置一个简单的字符串也不起作用:
session.setAttribute("somevalue","someValue");
在此处的 servlet 中给我 null:
String val = (String) session.getAttribute("somevalue");
关于什么可能导致这种情况的任何想法?
结果:
原来是 url 的问题,实际上是一个拼写错误,正如 BalusC 所提到的,所以会话 cookie 的路径在 jsp 和 servlet 之间不匹配。
【问题讨论】:
-
会话 cookie 绑定到特定的域+路径。只需在 webbrowser 的开发人员工具集中打开 HTTP 流量监视器并跟踪 cookie 流量。
-
我有 firebug 和 live http headers。我刚刚添加了 httpfox 用于监控。这就是你的想法吗?
-
是的,检查一下 cookie 的行为是否符合预期。
-
您观察到服务器设置了cookies。但是客户端是否也在随后的请求中返回了它们?检查
Cookie标头。如果不存在,则显然在Set-Cookie标头中设置的cookie 域+路径与需要设置Cookie标头的请求不匹配。你是否修改过Tomcat或web.xml配置中的会话cookie路径? “此处省略名称”看起来很奇怪,因为它通常只代表上下文路径。 -
不,当请求从 servlet 中的 jsp 返回时,会话为空。我会检查 cookie 标头。我没有为会话 cookie 设置任何内容,除了在 context.xml 中设置为 cookies="true"。此处省略名称意味着我不想放置实际的上下文路径。不,我没有修改 web.xml
标签: java jsp servlets frames httpsession