我正在使用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");
但由于某种原因,当我重定向而不是前进时,设置属性不起作用。
答案 0 :(得分:1)
redirect是发送给浏览器的HTTP响应,要求它向指定的URL提交新请求。由于它导致发出一个全新的请求,因此您设置的先前请求属性将不会在新请求中可用。
在转发到servlet方面,您是否检查了web.xml配置。它是否设置为转发的servlet看到转发的请求?
您可以将属性保存到第一个servlet中的会话,并从第二个servlet访问它。 使用http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getSession()
您也可以在重定向中的URL查询字符串中传递属性值。因此,您的重定向网址看起来像'myRedirectUrl?attributeName = attributeValue'
另外还尝试使用'include'方法而不是'forward'。