使用嵌入式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") %>
答案 0 :(得分:2)
在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) {
答案 1 :(得分:1)
您可能希望比较servlet和jsp中的会话ID。如果它们不同,可以在tomcat中检查您的会话和cookie配置