java servlet:response.sendRedirect()在提交响应后调用时不提供非法状态异常。为什么?

java servlet:response.sendRedirect()在提交响应后调用时不提供非法状态异常。为什么?,java,exception,servlets,redirect,commit,Java,Exception,Servlets,Redirect,Commit,在响应提交后,如此处,重定向语句应给出异常,但如果此重定向语句NET位于if块中,则不会给出异常。但如果它位于if块外,则会给出异常。我已在下面两处显示了相同的语句(带有标记的星号)。请告诉我原因 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO

在响应提交后,如此处,重定向语句应给出异常,但如果此重定向语句NET位于if块中,则不会给出异常。但如果它位于if块外,则会给出异常。我已在下面两处显示了相同的语句(带有标记的星号)。请告诉我原因

protected void doPost(HttpServletRequest request, HttpServletResponse response)          throws    ServletException, IOException {
            // TODO Auto-generated method stub
    synchronized (noOfRequests)
    {
        noOfRequests++;
        }
        PrintWriter pw=null;
        response.setContentType("text/html");
        response.setHeader("foo","bar");
//由于上述声明,已提交回复

        pw=response.getWriter();
        pw.print("hello : "+noOfRequests);
//若我删除下面的语句,那个么if块中也会出现同样的语句。所以if块中的语句也应该像这个语句一样给出异常,但它并没有这样做。为什么

***response.sendRedirect("http://localhost:8625/ServletPrc/login%  20page.html");


    if(true)
    {
                  //same statement as above
        ***response.sendRedirect("http://localhost:8625/ServletPrc/login%20page.html");
    }
    else{

        request.setAttribute("noOfReq", noOfRequests);
        request.setAttribute("name", new Name().getName());
        request.setAttribute("GmailId",this.getServletConfig().getInitParameter("GmailId") );
        request.setAttribute("YahooId",this.getServletConfig().getInitParameter("YahooId") );
        RequestDispatcher view1=request.getRequestDispatcher("HomePage.jsp");
        view1.forward(request, response);

    }


}               
从第5.3节:

这些方法的副作用是提交响应(如果有) 尚未提交,并将其终止。没有进一步的输出到客户端 应在调用这些方法后由servlet生成。如果数据被写入 调用这些方法后的响应将忽略数据

如果数据已写入响应缓冲区,但未返回到客户端 (即响应未提交),响应缓冲区中的数据必须 通过这些方法清除并替换为数据集。如果回答是 如果已提交,则这些方法必须抛出IllegalStateException


我认为这两个规范涵盖了您的所有情况。

试着在第一个区块结束之前做出响应。刷新,写尽可能多的内容,但除非它被发送出缓冲区,否则它仍然没有提交。

我想你应该再次考虑ma问题。在执行语句后,setHeader Response被提交。因此,任何redrect语句都会抛出非法状态异常。但如果将redirect语句放入if块,则它甚至不会抛出异常如果执行if block,我觉得我们大多数人仍然无法指出问题所在,因为对问题的描述不够系统。请您编辑它,使其简短扼要。