gpt4 book ai didi

java - 来自 JSP 的每个 servlet 请求都会创建新 session 吗?

转载 作者:行者123 更新时间:2023-11-30 08:04:50 25 4
gpt4 key购买 nike

我有一个旧版 Java 1.6,运行 localhost 和 Tomcat 7 应用程序,使用 JSP 页面、带有框架的框架集、javascript,但没有像 Struts 这样的框架。我使用请求或 session 从 servlet 传递一个要在页面中显示的对象,效果很好。

但是,我最近做了一些更改,现在我无法从 session 或请求中检索回相同的对象。它以前一直工作正常,所以我不确定是什么损坏了,但我什至无法将字符串值从 JSP 发送回 servlet。

我创建了一个新的精简 JSP,但使用请求或 session 都无法从中获取任何信息。当我将代码推送到 Tomcat 6 Web 服务器时,它会执行相同的操作。使用调试器,我看到 session 中填充的对象,但随后每次创建新 session 时都会丢失,就像使用以下简单代码获取 sessionid 一样:

System.out.println("The session id is: " + session.getId());

session ID 为:EB431C19B41957B2BB2EFC3DBAF32241

session ID 为:C9CBD30E84D5C93DF6114C1412AE5523然后我在 Firebug 的标题、响应标题下看到了这一点:

设置 Cookie JSESSIONID=C9CBD30E84D5C93DF6114C1412AE5523; Path=/此处省略名称/;仅限 Http,

所以我知道 cookie 已设置。我还删除了 jquery,并尽可能地删除 jsp 代码,但这似乎不是问题。

我正在使用:HttpSession session = request.getSession(true);但使用 false 并不重要。

session.setAttribute("ObjNameList", objNameList);

context.xml 将 cookie 设置为 true,并且我们确实使用 response.sendRedirect,但前提是抛出错误,如下所示: response.sendRedirect("Error.jsp");代码中也没有任何地方使 session 无效。

我在 jsp 中所做的就是使用以下内容发回表单:

document.formName.submit(); 效果很好。使用此代码尝试在 session 中设置一个简单的字符串也不起作用:

session.setAttribute("somevalue","someValue");

在 servlet 中给我 null:

String val = (String) session.getAttribute("somevalue");

有什么想法可能导致这种情况吗?

结果:

结果是 url 的问题,实际上是一个拼写错误,正如 BalusC 提到的,因此 session cookie 的路径在 jsp 和 servlet 之间不匹配。

最佳答案

仔细检查该 servlet 的请求 URL 是否与 session cookie 域和路径匹配。如果不匹配,那么浏览器就不会随请求一起发回 session cookie,服务器会认为无法建立 session ,因此只会创建一个新 session 。

您可以在浏览器网络开发者工具集的HTTP流量监视器中检查cookie(在Chrome/Firefox23+/IE9+中按F12并打开“网络”选项卡)。当新 session 开始时,服务器必须返回带有 Set-Cookie header 的响应,其中包含 cookie 值和路径(以及隐式域)。当浏览器在同一域和路径上发送后续请求时,它必须通过 Cookie 请求 header 将该 cookie 传回。

另请参阅:

关于java - 来自 JSP 的每个 servlet 请求都会创建新 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com