servlet没有将会话属性转发给jsp

时间:2014-04-19 08:14:33

标签: java jsp tomcat servlets embedded-tomcat-8

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

2 个答案:

答案 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配置