0

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

4 回答 4

5

如果您必须有多个重定向行来检查每个自己的条件,为了不出现异常,您应该控制响应是否已提交。

HttpServletResponse response = (HttpServletResponse) getResponse();

if (!response.isCommitted()){
// redirect or dispatch whereever you want
}
于 2015-02-17T10:05:05.023 回答
2

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

但是,似乎sendRedirect()真的不需要使用 there 。您似乎认为您需要使用sendRedirect()after forward(),因为您在两者中都使用了相同的页面。其实,不是这样的。

只需删除sendRedirect线,你会没事的。

也可以看看:

于 2013-08-06T11:59:25.447 回答
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/

希望这可以帮助。

萨希尔

于 2013-08-06T11:40:33.907 回答
0

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

于 2013-08-06T12:22:28.290 回答