我有一个遗留Java 1.6运行localhost与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 然后我在标题下的firebug中看到这个,响应标题:
Set-Cookie JSESSIONID = C9CBD30E84D5C93DF6114C1412AE5523;这里省略了路径= /名称/; HttpOnly,
所以我知道已经设置了cookie。我也删除了jquery,我尽可能地删除了jsp代码,但这似乎不是问题。
我正在使用: HttpSession session = request.getSession(true);但使用虚假并不重要。
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");
关于可能导致这种情况的任何想法?
Resultion:
事实证明这是一个问题,实际上是一个错字,正如BalusC所提到的那样,因此会话cookie的路径在jsp和servlet之间不匹配。
答案 0 :(得分:1)
如果该servlet的请求URL与会话cookie域和路径匹配,请仔细检查。如果它不匹配,那么浏览器根本不会发送会话cookie以及请求,服务器会认为没有建立会话的方法,因此只会创建一个新的。
您可以在浏览器的网络开发者工具集的HTTP流量监控器中查看Cookie(在Chrome / Firefox23 + / IE9 +中按F12,然后打开"网络"标签)。当新会话开始时,服务器必须返回带有Set-Cookie
标头的响应,其中包含cookie值和路径(以及隐式域)。当浏览器在同一个域和路径上发送后续请求时,它必须通过Cookie
请求标头返回该cookie。