我正在使用带有 Http11NioProtocol 连接器的 Tomcat 6.0.32 来实现长轮询。
我的彗星处理器正在HttpSevletResponse
排队等待事件准备好发回。当它发回事件时,它正在将二进制流写入小程序,所以我response.getOutputStream().write()
用来发回数据。写入流时,它是同步的。
当第二帧中的另一个网页重新加载(从同一容器中的 SpringController 生成的独立 JSP)时,我偶尔会在日志中看到这一点并且页面无法加载。
当同时请求两者时,彗星处理器和常规 servlet 生成的响应之间是否可能存在并发错误?
堆栈跟踪:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:611)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:180)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.WEB_002dINF.jsp.sale_jsp._jspService(sale_jsp.java:96)