一尘不染

servlet不将会话属性转发到jsp

jsp

使用嵌入式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") %>

阅读 192

收藏
2020-06-08

共1个答案

一尘不染

在JSP方面,您不需要说request.getSession()session.getAttribute();
而在创建servlet上下文时,您在Main.java中遇到了问题(使用嵌入式Tomcat的技巧)。您没有通过将Web应用程序添加到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) {
2020-06-08