我在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
答案 0 :(得分:0)
容器遇到out.flush();它从那里返回并且不执行剩余的代码行或者只是忽略它们,只有在out.flush();
之前没有重定向的情况下才是这样。我尝试了很多组合。如果有人有兴趣看看这些组合,我可以分享它们