servlet不会将会话属性转发给jsp

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

Servlet

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

JSP

  

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


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

Servlet

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

JSP

  

在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) { 

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