Tomcat, Comet, and getOutputStream () are already called to answer

I am using Tomcat 6.0.32 with the Http11NioProtocol connector to implement a lengthy survey.

My comet processor holds HttpSevletResponsein line until the event is ready to be dispatched. When it sends back the event, it writes the binary stream to the applet, so I use it response.getOutputStream().write()to send the data back. When writing to the stream, it is synchronized.

When another web page in the second frame reloads (an independent JSP created by SpringController in the same container), sometimes I see this in the logs and the page does not load.

Is it possible that there is a concurrency error between the response generated by the comet processor and the regular servlet when both are requested at the same time?

Stack trace:

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)
+3
2

, JSP response.getWriter(), , response.getOutputStream(). .

, , .

+2

concurrency: . Servlet HttpRequest HttpResponse.

JSP, : sale_jsp.java:96
- , getOutputStream().

JSP, :

<%@ page language="java" contentType="text/html;" %>
<%@ page import="java.io.*" %>

<% OutputStream os = response.getOutputStream(); 
   os.write(......);
%>

, , 3 '\n' OutputStream os = response.getOutputStream(), ..
, %> <%, :

<%@ page language="java" contentType="text/html;"
    import="java.io.*"   %><%

    OutputStream os = response.getOutputStream(); 
   os.write(......);
%>

Tomcat, .
sale.jsp, , , .

, <%!, JSP, concurrency...

0

All Articles