Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet未将会话属性转发到jsp_Java_Jsp_Tomcat_Servlets_Embedded Tomcat 8 - Fatal编程技术网

Java servlet未将会话属性转发到jsp

Java servlet未将会话属性转发到jsp,java,jsp,tomcat,servlets,embedded-tomcat-8,Java,Jsp,Tomcat,Servlets,Embedded Tomcat 8,使用嵌入式tomcat,此代码可以工作: Servlet: String test = "test"; request.setAttribute("test", test); request.getRequestDispatcher("/index.jsp").forward(request, response); <%= request.getAttribute("test") %> String test = "test"; request.getSession().setA

使用嵌入式tomcat,此代码可以工作:

Servlet

String test = "test";
request.setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= request.getAttribute("test") %>
String test = "test";
request.getSession().setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= session.getAttribute("test") %>
JSP

String test = "test";
request.setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= request.getAttribute("test") %>
String test = "test";
request.getSession().setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= session.getAttribute("test") %>
JSP

String test = "test";
request.setAttribute("test", test);
request.getRequestDispatcher("/index.jsp").forward(request, response);
<%= request.getAttribute("test") %>
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的技巧);您没有通过将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) {

在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配置。您可能希望比较servlet和jsp中的会话id。如果它们不同,可以检查tomcat中的会话和cookie配置,这不会改变代码的工作方式,因此不会解决任何问题。如果你想提出改进建议,请将其作为评论而不是答案发布。Totò在我不看这个问题的时候发布了他的答案。我不能评论每一个未回答的问题,也不能解释为什么它不是答案,因为我没有整天在电脑前阅读StarckOverflow。如果你觉得这是一个糟糕的答案,你应该在下面留下一条评论,就像我在你的答案下面做的那样(我仍然认为这更像是改进而不是解决方案,所以应该删除并作为评论发布)。这在我的应用程序中运行良好,所以我看不出它对威胁不起作用的原因。在JSP方面,您不处理请求对象。您可以在服务器端处理请求。不,这对我来说是在WebSphere上运行的,但我确信它可以在嵌入式或外部Tomcat上运行。你做了一个干净的停止和重新发布?嵌入式Tomcat有时在正确部署和更新方面反复无常。这是可能的,但这会让我大吃一惊。我会假设其他一些问题,可能是web.xml中缺少设置,会话超时设置太短,……这不会改变代码的工作方式,所以它不会解决任何问题。如果你想提出改进建议,请将其作为评论而不是答案发布。Totò在我不看这个问题的时候发布了他的答案。我不能评论每一个未回答的问题,也不能解释为什么它不是答案,因为我没有整天在电脑前阅读StarckOverflow。如果你觉得这是一个糟糕的答案,你应该在下面留下一条评论,就像我在你的答案下面做的那样(我仍然认为这更像是改进而不是解决方案,所以应该删除并作为评论发布)。这在我的应用程序中运行良好,所以我看不出它对威胁不起作用的原因。在JSP方面,您不处理请求对象。您可以在服务器端处理请求。不,这对我来说是在WebSphere上运行的,但我确信它可以在嵌入式或外部Tomcat上运行。你做了一个干净的停止和重新发布?嵌入式Tomcat有时在正确部署和更新方面反复无常。这是可能的,但这会让我大吃一惊。我会假设其他一些问题,可能是web.xml中缺少设置,会话超时设置太短,…变量test是否可能为null?如果您在会话中使用
request.getSession().setAttribute
,则必须从会话中读取,而不是从请求中读取。试试
(我想这就是@jedison试图建议的)是的,但现在你会看到它的工作原理:)从NetBeans IDE切换到Eclipse并卸载嵌入式Tomcat怎么样?切换到真正的外部Tomcat。不,不,不是那样,只是我使用Eclipse,他们有一个Tomcat部署插件,所以我不需要嵌入式Tomcat。它可以正常工作。变量test是否有可能为null?如果您在会话中使用
request.getSession().setAttribute
放入某些内容,则必须从会话中读取,而不是从请求中读取。试试
(我想这就是@jedison试图建议的)是的,但现在你会看到它的工作原理:)从NetBeans IDE切换到Eclipse并卸载嵌入式Tomcat怎么样?切换到真正的外部Tomcat。不,不,不是那样,只是我使用Eclipse,他们有一个Tomcat部署插件,所以我不需要嵌入式Tomcat。它只是工作。