【问题标题】:servlet not forwarding session attribute to jspservlet 不将会话属性转发给 jsp
【发布时间】:2014-04-19 08:14:33
【问题描述】:

使用嵌入式 tomcat,此代码有效:

Servlet

String test = "test";
request.setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);

JSP

<%= request.getAttribute("test") %>

它设置属性test,然后在servlet/example的jsp页面example.jsp上打印出来。


但是,如果我尝试在会话中设置属性,那么我不会得到相同的结果,相反,我会在使用这个时得到 null

Servlet

String test = "test";
request.getSession().setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);

JSP

<%= session.getAttribute("test") %>

【问题讨论】:

  • 变量 test 是否为空?
  • 如果你在request.getSession().setAttribute 的会话中放入一些东西,你必须从会话中读取它,而不是从请求中读取。试试&lt;%= session.getAttribute("test") %&gt;(我认为这是@jedison 试图建议的)
  • 是的,但现在你会看到它何时起作用:)
  • 从 NetBeans IDE 切换到 Eclipse 并转储嵌入式 Tomcat 怎么样?切换到真正的外部Tomcat。
  • 不,不,不是那样,只是我使用 Eclipse,他们有一个 Tomcat 部署插件,所以我不需要嵌入式 Tomcat。它只是工作。

标签: java jsp tomcat servlets embedded-tomcat-8


【解决方案1】:

在 JSP 方面,你不需要说request.getSession(),只需说session.getAttribute();
而且你在创建 servlet 上下文时在 Main.java 中遇到了问题(使用嵌入式 Tomcat 的一个技巧);你没有得到通过将 webapp 添加到 tomcat 中创建的上下文,你有一些其他的上下文。

//          File base = new File("src/main/webapp");
//          context = tomcat.addContext("", base.getAbsolutePath());
//          tomcat.addWebapp(null, "/", base.getAbsolutePath());

        context = tomcat.addWebapp("/", new File("src/main/webapp").getAbsolutePath());
        context.setSessionTimeout(10080);

我注释掉了您的代码并更改了上下文处理,现在一切正常。并且要捕获一个新异常。

        } catch (ServletException | InterruptedException | LifecycleException exception) {

【讨论】:

  • 这不会改变代码的工作方式,因此它不会解决任何问题。如果您想提出改进建议,请将它们发布为 cmets,而不是答案。
  • Totò 在我不看这个问题时发布了他的答案。我不能对每一个未回答的问题发表评论并解释为什么它不是回答,因为我没有整天在电脑前阅读 StarckOverflow。如果您觉得这是一个不好的答案,您应该像我在您的答案下一样在其下发表评论(我仍然认为这更像是改进而不是解决方案,因此应该删除并作为评论发布)。
  • 这在我的应用程序中运行良好,所以我看不出它为什么不适用于 ThraT。在 JSP 端,您不处理请求对象。您在服务器端处理请求。
  • 不,这对我来说在 WebSphere 上运行,但我确信它可以在嵌入式或外部 Tomcat 上运行。您是否彻底停止并重新发布?嵌入式 Tomcat 有时在正确部署和更新方面反复无常。
  • 可能,但这会让我大吃一惊。我会假设其他一些问题,可能是您的 web.xml 中缺少设置,会话超时设置太短,...
【解决方案2】:

您可能想要比较 servlet 和 jsp 中的会话 ID。如果它们不同,请检查您在 tomcat 中的会话和 cookie 配置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 2012-11-18
    • 1970-01-01
    • 2012-12-07
    • 2014-10-07
    • 1970-01-01
    相关资源
    最近更新 更多