1

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

小服务程序

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

JSP

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

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


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

小服务程序

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

JSP

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

2 回答 2

3

在 JSP 方面,你不需要说request.getSession(),只是session.getAttribute();
你的 Main.java 在创建 servlet 上下文时遇到了问题(使用嵌入式 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) {
于 2014-04-19T08:28:59.817 回答
1

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

于 2014-04-19T09:01:06.160 回答