为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2019-06-05 15:11:32
在提交响应后,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();
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

初学者之间常见的误解是他们认为forward()sendRedirect(),或sendError()会神奇地退出并“跳出”方法块,从而忽略代码的残余。例如:

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    }
    forward(); // This is STILL invoked when someCondition is true!}

因此,事实并非如此。它们的行为当然不会与任何其他Java方法不同(预期System#exit()当然)。当someCondition在上面的例子中是true你就这样打电话给我forward()sendRedirect()sendError()在相同的请求/响应下,机会是大的你会得到例外:

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

如果if语句调用forward()之后你会打电话给我sendRedirect()sendError(),则会引发以下异常:

在提交响应后无法调用sendReDirect()

要解决这个问题,您需要添加一个return;事后陈述

protected void doPost() {
    if (someCondition) {
        sendRedirect();
        return;
    }
    forward();}

..或者介绍另一个块。

protected void doPost() {
    if (someCondition) {
        sendRedirect();
    } else {
        forward();
    }}

若要确定代码中的根本原因,只需搜索调用forward()sendRedirect()sendError()而不退出方法块或跳过代码的剩余部分。这可以在特定代码行之前的同一个servlet中,但也可以在特定servlet之前调用的任何servlet或过滤器中。

如果sendError(),如果您的唯一目的是设置响应状态,请使用setStatus()相反。


另一个可能的原因是servlet写入响应,而forward()将被调用,或者在相同的方法中被调用。

protected void doPost() {
    out.write("some string");
    // ... 
    forward(); // Fail!}

响应缓冲区大小在大多数服务器中默认为2kb,因此如果向其写入超过2kb的响应缓冲区大小,则将提交响应缓冲区大小。forward()也会以同样的方式失败:

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

解决方案很明显,只是不要写入servlet中的响应。这是JSP的责任。您只需设置一个请求属性,如下所示request.setAttribute("data", "some string")然后在JSP中打印,如下所示${data}..另见我们的servlet wiki页面学习如何正确地使用servlet。

另见:


不相干对于具体的问题,JDBC代码正在泄漏资源。把它也修好。有关提示,请参见在JDBC中,连接、语句和ResultSet应该多久关闭一次?


查看完整回答
反对 回复 2019-06-05
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

即使添加返回语句也会引发此异常,只有以下代码是解决方案:

if(!response.isCommitted())// Place another redirection


查看完整回答
反对 回复 2019-06-05
?
慕容森

TA贡献1853条经验 获得超18个赞

通常,您在完成重定向之后会看到此错误,然后尝试将更多的数据输出到输出流。在我过去见过这种情况的情况下,通常是尝试重定向页面的过滤器之一,然后仍然转发到servlet。我无法立即发现servlet有什么问题,所以您可能也想看看您已经设置的任何过滤器。

编辑:对诊断…问题的更多帮助

诊断此问题的第一步是确切地确定抛出异常的位置。我们假设它是由行抛出的

getServletConfig().getServletContext()
                  .getRequestDispatcher("/GroupCopiedUpdt.jsp")
                  .forward(request, response);

但是您可能会发现,在代码的后面抛出它,在代码中,在尝试执行转发操作之后,您将尝试输出到输出流。如果它来自上面的行,那么它意味着在该行之前的某个地方,您可以:

  1. 将数据输出到输出流,或
  2. 事先做了另一次重定向。

祝好运!


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 1825 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信