转发和发送重定向问题。 "Cannot call sendRedirect() after the response has been committed"



我想实现这个
在我的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()

我读了一些与此相关的主题,但我还没有解决它。此外,应用程序仍在继续工作,尽管我在控制台中遇到了这个错误。。。非常感谢!

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

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

首先,在使用了forward()之后,不能调用sendRedirect()。所以,你得到了例外。

然而,似乎确实不需要使用sendRedirect()。您似乎认为您需要在forward()之后使用sendRedirect(),因为您在这两个页面中都使用了相同的页面。事实上,情况并非如此。

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

另请参阅:

  • java.lang.IollegalStateException:提交响应后无法(forward|sendRedirect|create session)

您试图做的根本错误。你不能在转发后进行重定向,反之亦然。你可以做正向或重定向。

阅读这些链接:

http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html#forward(javax.servlet.ServletRequest,javax.servlets.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/

希望这能有所帮助。

Sahil

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

相关内容

最新更新