转发和发送重定向问题。 “在提交响应后无法调用sendRedirect()”

时间:2013-08-06 11:20:48

标签: jsp servlets response.redirect forward

我想实现这个..
在我的page1.jsp中我有一个链接并且链接触发了一个servlet

    <a href="Servlet">link1</a>

所以,当用户按下link1,servlet以及其他我想要做的事情。
1 传递到下一页page2.jsp一个对象和
2 将用户重定向到page2.jsp

在我写的Servlet中:

     request.setAttribute("cis", myObjet);
     RequestDispatcher disp = getServletContext().getRequestDispatcher("/page2.jsp");
     disp.forward(request, response);
     response.sendRedirect("page2.jsp");

运行应用程序后,我在控制台中收到错误消息:

  

在提交响应后无法调用sendRedirect()

我读了一些与此相关的主题,但我没有解决它。该应用程序继续工作,虽然我在控制台中有这个错误...非常感谢你!

4 个答案:

答案 0 :(得分:4)

如果您需要多个重定向行来检查每个拥有的条件,为了不获得异常,您应该控制响应的提交。

HttpServletResponse response = (HttpServletResponse) getResponse();

if (!response.isCommitted()){
// redirect or dispatch whereever you want
}

答案 1 :(得分:2)

首先,在您使用sendRedirect()之后,无法致电forward()。所以,你得到了那个例外。

然而,似乎真的不需要使用sendRedirect()。您似乎相信在sendRedirect()之后需要使用forward(),因为您在两者中都使用了相同的页面。实际上,它不是那样的。

只需删除sendRedirect行,就可以了。

另见:

答案 2 :(得分:1)

你要做的事情根本就是错误的。您不能在前进后进行重定向,反之亦然。您可以进行转发或重定向。

阅读以下链接:

http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html#forward(javax.servlet.ServletRequest,javax.servlet.ServletResponse)

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)

http://javapapers.com/jsp/difference-between-forward-and-sendredirect/

希望这有帮助。

萨赫勒

答案 3 :(得分:0)

你可以使用rd.include(req,res)的组合;和res.sendRedirect( - );在同一时间但你不能与rd.forward(req,res)的组合;和res.sendRedirect( - );同时。因为两个转发到新页面。