-->

响应中心已经AREADY一直致力于(Response has aready been committ

2019-10-18 07:22发布

我有一个取消按钮,以前只是刷新值。 现在我已经转换他们刷新或重新加载页面,并移动到只读页面。 因此,改变取消按钮来调用一个函数像这样,

function chkArea(){

        var url='<c:out value="${model.contextPath}"/>/abcHandler.do?operation=view;
        document.forms[0].action=url;
        document.forms[0].submit();
    }

现在,当我提交取消,我在UI收到以下消息,

java.lang.IllegalStateException: Response has already been committed    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.EvermindHttpServletResponse.resetBuffer(EvermindHttpServletResponse.java:1892)    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:249)  at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)........

和控制台显示以下错误:

javax.servlet.ServletException: The "url" attribute illegally evaluated to "null" or "" in &lt;import&gt;
    at com.evermind.server.http.EvermindPageContext.handlePageThrowable(EvermindPageContext.java:899)
    at com.evermind.server.http.EvermindPageContext.handlePageException(EvermindPageContext.java:816)

我没有看到在JS或JSP的任何错误。 似乎是什么问题? 有什么建议么?

Answer 1:

首先,这个问题是不是在JSP或JS在你的例子1。 问题是,当它得到你的servlet做什么“... / abcHandler.do?operation=view;” 请求。

问题是,你正在尝试做的东西,就需要更改的HTTP响应头...头已发送之后。 这就是异常/消息说。 (一旦Servlet框架开始写的响应的响应是“承诺”。当事情打开servlet的输出流/写器...在准备写响应体通常触发。)

为了给你一个正确的诊断,并就如何解决此特定问题明智的建议,我们需要看在Servlet / JSP代码正在处理上述请求。

在“URL非法评价为空”的消息是有点难以安置。 它可以在之前发生的IllegalStateException ......或之后。

(一种可能性是,你的JSP代码试图做的是有些意外“网址”属性的东西null ,即引发了异常,然后将容器的错误处理程序试图设置不同的响应状态...... 是失败的因为响应已经提交。)

总之,这是不可能找出问题的根源是什么没有更多的信息; 即代码。


1 -其实,你缺少的收盘报价url初始化...但我认为这只是一个抄写错误。



Answer 2:

当你写从JSP输出流,然后在其上再进行一些操作这个错误来。 这将导致IllegalStateException 。 当响应已经提交,则不应进行任何操作。 通过承诺,我指的是响应发送回客户端。 一个常见的情况是

 OutputStream stream = response.getOutPutStream();
  stream.write("something here");
  stream.flush();
 RequestDispatcher rd = request.getRequestDispatcher("someFile.jsp");
   rd.forward(request, response); // You can't do this because stream is already written


文章来源: Response has aready been committed