//
you're reading...
Codes, Java

Sửa Lỗi: getOutputStream() has already been called for this response

Mar 9, 2012 2:22:38 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
	at org.apache.catalina.connector.Response.getWriter(Response.java:607)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196)
	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:179)
	at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:116)
	at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:76)
	at org.apache.jsp.Admin.nve_005fadmin_005fdownloadfile_jsp._jspService(nve_005fadmin_005fdownloadfile_jsp.java:6192)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:619)

Mô tả lỗi:
Trong lập trình web jsb, khi xem tệp tin log localhost của Tomcat nếu bạn thấy nguyên văn lỗi đầy đủ trong đó là như phía trên thì nghĩa là lỗi này phát sinh khi bạn đã gọi sử dụng hàm getOutputStream() của đối tượng response quá nhiều lần trong JSP. Nguyên tắc cơ bản trong giao thức HTTP là: 1 yêu cầu (request), 1 phản hồi (response). Bất kể việc phản hồi lại là 1 trang web, một tập tin hình ảnh, hay cả một tập tin tài liệu PDF. Lỗi này cũng có thể phát sinh ngay cả khi trong trang web của bạn chỉ gọi duy nhất một hàm getOutputStream() để nạp nội dung của 1 tập tin cho việc tải tập tin này xuống, nguyên tắc mặc định là JSP đã trả về 1 yêu cầu là nội dụng văn bản của một website, và khi nạp nội dung của 1 tập tin lên điều đó đồng nghĩa với việc gọi lại hàm getOutputStream() lần thứ 2.

Khắc phục:
1. Sử dụng servlet thay cho việc sử dụng JSP để nạp nội dung của một tập tin
2. Đặt đoạn code này phía dưới cùng của trang JSP để khắc phục:

out.clear();
out = pageContext.pushBody(); 

~Fri3ng3R~

Advertisements

Discussion

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: