为什么sendRedirect(String path)不会抛出IllegalStateException?

时间:2013-12-19 03:10:51

标签: redirect tomcat7 java-ee-6 servlet-3.0

我在servlet中跟随代码

  public class RedirectingExceptionServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("Hello, response is being committed");
        out.flush();
        response.sendRedirect("redirectedExceptionServlet");
        System.out.println("Tried redirecting after committing response");
    }

}

在这里,我正在尝试在提交响应后重定向。

根据规范Send Redirect java doc如果在提交响应后尝试调用sendRedirect(path),sendRedirect(String)应该抛出IllegalStateException

相反,我看到一个带有消息的页面:Hello,正在提交响应

另一个有趣的事情是,我无法在服务器控制台中看到声明“在提交响应后尝试重定向”

有人可以解释一下这种行为吗?

Env详细信息:Windows 7,Tomcat 7.0.47,J2EE-6

1 个答案:

答案 0 :(得分:0)

容器遇到out.flush();它从那里返回并且不执行剩余的代码行或者只是忽略它们,只有在out.flush();

之前没有重定向的情况下才是这样。

我尝试了很多组合。如果有人有兴趣看看这些组合,我可以分享它们