使用嵌入式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。
test
/example
example.jsp
但是,如果我尝试在会话中设置属性,则不会得到相同的结果,而是null在使用此方法时得到:
null
String test = "test"; request.getSession().setAttribute("test", test); request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= session.getAttribute("test") %>
在JSP方面,您不需要说request.getSession(),session.getAttribute(); 而在创建servlet上下文时,您在Main.java中遇到了问题(使用嵌入式Tomcat的技巧)。您没有通过将Web应用程序添加到tomcat来创建上下文,而是有其他上下文。
request.getSession()
session.getAttribute();
// 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) {