我正在使用Tomcat 6.0.32和Http11NioProtocol連接器來實現長輪詢。已經爲此響應調用了Tomcat,Comet和getOutputStream()
我的彗星處理器將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)
你試過用response.getWriter()來代替嗎?一個拉[這個答案](http://stackoverflow.com/questions/1776142/getoutputstream-has-already-been-called-for-this-response/1776161#1776161) – Andrew 2011-03-18 15:41:22
我需要使用getOutputStream,因爲我正在發送字節到applet,而不是文本 – Adam 2011-03-18 15:58:04
你可能會發布一些你的servlet的代碼? – brent777 2011-03-18 20:59:40