【问题标题】:forward and sendRedirect issue. "Cannot call sendRedirect() after the response has been committed" [duplicate]转发和发送重定向问题。 “提交响应后无法调用 sendRedirect()” [重复]
【发布时间】:2013-08-07 09:04:53
【问题描述】:

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

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

因此,当用户按下链接 1 时,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()

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

【问题讨论】:

  • 既然已经转发到同一页面,为什么还要添加sendRedirect
  • 你说得对!!它有效.. 如果你愿意,可以将其作为答案提交,接受它.. thx @RohitJain

标签: jsp servlets response.redirect forward


【解决方案1】:

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

HttpServletResponse response = (HttpServletResponse) getResponse();

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

【讨论】:

    【解决方案2】:

    首先,你不能打电话给sendRedirect(),在你已经用过forward()之后。所以,你得到了那个例外。

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

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

    另请参阅:

    【讨论】:

    • 在我的情况下检查空指针异常并通过避免这种情况完全修复它来修复它。
    【解决方案3】:

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

    阅读这些链接:

    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/

    希望这会有所帮助。

    萨希尔

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 2014-08-22
        • 2020-11-19
        • 2012-09-23
        相关资源
        最近更新 更多