我正在使用 java 中的 servlet;我正在尝试从一个 servlet 转发到另一个 servlet。 我还想将属性传递给其他 servlet。
当我想转发到 JSP 时,它工作得很好。我愿意
request.setAttribute("attrName", attribute)
request.getRequestDispatcher("forward.jsp").forward(request, response);
但是当我对 servlet 执行相同操作时:
request.setAttribute("attrName", attribute)
request.getRequestDispatcher("TheServlet").forward(request, response);
我的服务器崩溃了,出现以下错误:
javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:395)
我知道我可以使用以下行重定向到 servlet:
response.sendRedirect("TheServlet");
但由于某种原因,当我重定向而不是转发时,设置的属性不起作用。
最佳答案
redirect 是发送到浏览器的 HTTP 响应,请求浏览器向指定的 URL 提交新请求。由于它会导致发出全新的请求,因此您设置的先前请求属性将在新请求中不可用。
在转发到 servlet 方面,您是否检查了 web.xml 配置。是否设置为使转发的 servlet 能够看到转发的请求?
您可以将该属性保存到第一个 servlet 中的 session 中,并从第二个 servlet 中访问它。 使用http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getSession()
您还可以在重定向的 URL 查询字符串中传递属性值。因此,您的重定向 URL 将类似于“myRedirectUrl?attributeName=attributeValue”
另外还尝试使用“include”方法而不是“forward”。
关于java - 转发到 servlet 并设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580284/