在提交响应后,java.lang.IllegalStateException:Nan

在提交响应后,java.lang.IllegalStateException:Nan

这种方法

java.lang.IllegalStateException:不能在提交响应后转发

我找不到问题所在。有什么帮助吗?

    int noOfRows = Integer.parseInt(request.getParameter("noOfRows"));
    String chkboxVal = "";
    // String FormatId=null;
    Vector vRow = new Vector();
    Vector vRow1 = new Vector();
    String GroupId = "";
    String GroupDesc = "";
    for (int i = 0; i < noOfRows; i++) {
        if ((request.getParameter("chk_select" + i)) == null) {
            chkboxVal = "notticked";
        } else {
            chkboxVal = request.getParameter("chk_select" + i);
            if (chkboxVal.equals("ticked")) {
                fwdurl = "true";
                Statement st1 = con.createStatement();
                GroupId = request.getParameter("GroupId" + i);
                GroupDesc = request.getParameter("GroupDesc" + i);
                ResultSet rs1 = st1                        .executeQuery("select FileId,Description from cs2k_Files "
                                + " where FileId like 'M%' and co_code = "
                                + ccode);
                ResultSetMetaData rsm = rs1.getMetaData();
                int cCount = rsm.getColumnCount();

                while (rs1.next()) {
                    Vector vCol1 = new Vector();
                    for (int j = 1; j <= cCount; j++) {
                        vCol1.addElement(rs1.getObject(j));
                    }
                    vRow.addElement(vCol1);
                }
                rs1 = st1                        .executeQuery("select FileId,NotAllowed from cs2kGroupSub "
                                + " where FileId like 'M%' and GroupId = '"
                                + GroupId + "'" + " and co_code = " + ccode);
                rsm = rs1.getMetaData();
                cCount = rsm.getColumnCount();


Qyouu
浏览 1827回答 3
3回答

阿晨1998

初学者之间常见的误解是他们认为forward(),&nbsp;sendRedirect(),或sendError()会神奇地退出并“跳出”方法块,从而忽略代码的残余。例如:protected&nbsp;void&nbsp;doPost()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(someCondition)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendRedirect(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;forward();&nbsp;//&nbsp;This&nbsp;is&nbsp;STILL&nbsp;invoked&nbsp;when&nbsp;someCondition&nbsp;is&nbsp;true!}因此,事实并非如此。它们的行为当然不会与任何其他Java方法不同(预期System#exit()当然)。当someCondition在上面的例子中是true你就这样打电话给我forward()后sendRedirect()或sendError()在相同的请求/响应下,机会是大的你会得到例外:java.lang.IllegalStateException:不能在提交响应后转发如果if语句调用forward()之后你会打电话给我sendRedirect()或sendError(),则会引发以下异常:在提交响应后无法调用sendReDirect()要解决这个问题,您需要添加一个return;事后陈述protected&nbsp;void&nbsp;doPost()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(someCondition)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendRedirect(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;forward();}..或者介绍另一个块。protected&nbsp;void&nbsp;doPost()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(someCondition)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendRedirect(); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;forward(); &nbsp;&nbsp;&nbsp;&nbsp;}}若要确定代码中的根本原因,只需搜索调用forward(),&nbsp;sendRedirect()或sendError()而不退出方法块或跳过代码的剩余部分。这可以在特定代码行之前的同一个servlet中,但也可以在特定servlet之前调用的任何servlet或过滤器中。如果sendError(),如果您的唯一目的是设置响应状态,请使用setStatus()相反。另一个可能的原因是servlet写入响应,而forward()将被调用,或者在相同的方法中被调用。protected&nbsp;void&nbsp;doPost()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;out.write("some&nbsp;string"); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;forward();&nbsp;//&nbsp;Fail!}响应缓冲区大小在大多数服务器中默认为2kb,因此如果向其写入超过2kb的响应缓冲区大小,则将提交响应缓冲区大小。forward()也会以同样的方式失败:java.lang.IllegalStateException:不能在提交响应后转发解决方案很明显,只是不要写入servlet中的响应。这是JSP的责任。您只需设置一个请求属性,如下所示request.setAttribute("data", "some string")然后在JSP中打印,如下所示${data}..另见我们的servlet wiki页面学习如何正确地使用servlet。另见:“已经作出的反应”到底是什么意思?那么如何处理异常呢?不相干对于具体的问题,JDBC代码正在泄漏资源。把它也修好。有关提示,请参见在JDBC中,连接、语句和ResultSet应该多久关闭一次?

子衿沉夜

即使添加返回语句也会引发此异常,只有以下代码是解决方案:if(!response.isCommitted())//&nbsp;Place&nbsp;another&nbsp;redirection

慕容森

通常,您在完成重定向之后会看到此错误,然后尝试将更多的数据输出到输出流。在我过去见过这种情况的情况下,通常是尝试重定向页面的过滤器之一,然后仍然转发到servlet。我无法立即发现servlet有什么问题,所以您可能也想看看您已经设置的任何过滤器。编辑:对诊断…问题的更多帮助诊断此问题的第一步是确切地确定抛出异常的位置。我们假设它是由行抛出的getServletConfig().getServletContext() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getRequestDispatcher("/GroupCopiedUpdt.jsp") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forward(request,&nbsp;response);但是您可能会发现,在代码的后面抛出它,在代码中,在尝试执行转发操作之后,您将尝试输出到输出流。如果它来自上面的行,那么它意味着在该行之前的某个地方,您可以:将数据输出到输出流,或事先做了另一次重定向。祝好运!
打开App,查看更多内容
随时随地看视频慕课网APP