源码漏了一句, 在response.setContentType("application/pdf");下面还有一句:response.setContentLength(baos.size());错误: [02-12-24 11:51:35:746 CST] 57a66b11 SystemOut U 081:1431 [02-12-24 11:51:35:796 CST] 57a66b11 SystemOut U 091 [02-12-24 11:51:35:806 CST] 57a66b11 SystemOut U 10 [02-12-24 11:51:35:806 CST] 57a66b11 SystemOut U 11 [02-12-24 11:51:36:467 CST] 57a66b11 WebGroup X Servlet Error: : com.ibm.servlet.engine.srt.WriteBeyondContentLengthException at com.ibm.servlet.engine.srt.BufferedServletOutputStream.write(BufferedServletOutputStream.java:285) at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:236) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:250) at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:233) at pri_00025t._printtest_jsp_22._jspService(printtest.jsp :68) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:142) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(JspServlet.java:300) at org.apache.jasper.runtime.JspServlet.serviceJspFile(JspServlet.java:430) at org.apache.jasper.runtime.JspServlet.service(JspServlet.java:565) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.ibm.servlet.engine.webapp.StrictServletInstance.doService(ServletManager.java:827) at com.ibm.servlet.engine.webapp.StrictLifecycleServlet._service(StrictLifecycleServlet.java:167) at com.ibm.servlet.engine.webapp.IdleServletState.service(StrictLifecycleServlet.java:297) at com.ibm.servlet.engine.webapp.StrictLifecycleServlet.service(StrictLifecycleServlet.java:110) at com.ibm.servlet.engine.webapp.ServletInstance.service(ServletManager.java:472) at com.ibm.servlet.engine.webapp.ValidServletReferenceState.dispatch(ServletManager.java:1012) at com.ibm.servlet.engine.webapp.ServletInstanceReference.dispatch(ServletManager.java:913) at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:523) at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:282) at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:112) at com.ibm.servlet.engine.srt.WebAppInvoker.doForward(WebAppInvoker.java:91) at com.ibm.servlet.engine.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:184) at com.ibm.servlet.engine.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:67) at com.ibm.servlet.engine.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:106) at com.ibm.servlet.engine.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:125) at com.ibm.servlet.engine.oselistener.OSEListenerDispatcher.service(OSEListener.java:315) at com.ibm.servlet.engine.http11.HttpConnection.handleRequest(HttpConnection.java:60) at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:323) at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:252) at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
照你写的,我试了一下,结果为:%PDF-1.4 %噌忏 3 0 obj <> stream x渳?? 厵} 弨攂'8?0Cs蕪勀@梌'乀 E杔+~锍C萮 ?洼^?矯q尀轿讜緽ч顴蒬焷0唈r???d售帠???.i礧??娉錞,翪跗趌4>趾lJ廰埄薂?贪(?罵仚?7侫?endstream endobj 4 0 obj <> /ProcSet [/PDF /Text] >> /MediaBox [0 0 595 842] >> endobj 5 0 obj <> >> endobj 6 0 obj <> /Subtype /CIDFontType0 /Type /Font /W [11[423]] >> endobj 2 0 obj <> endobj 1 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj xref 0 9 0000000000 65535 f 0000000934 00000 n 0000000800 00000 n 0000000015 00000 n 0000000256 00000 n 0000000412 00000 n 0000000618 00000 n 0000000990 00000 n 0000001038 00000 n trailer <> startxref 1149 %%EOF Error: 500 Location: /test/pdf.jsp Internal Servlet Error:java.lang.IllegalStateException: OutputStream is already being used for this request at org.apache.tomcat.facade.HttpServletResponseFacade.getWriter(HttpServletResponseFacade.java:177) at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:166) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158) at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:205) at _0002fpdf_0002ejsppdf_jsp_30._jspService(_0002fpdf_0002ejsppdf_jsp_30.java:148) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:177) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:318) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:391) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404) at org.apache.tomcat.core.Handler.service(Handler.java:286) at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797) at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743) at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210) at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498) at java.lang.Thread.run(Thread.java:536)
源码漏了一句,
在response.setContentType("application/pdf");下面还有一句:response.setContentLength(baos.size());错误:
[02-12-24 11:51:35:746 CST] 57a66b11 SystemOut U 081:1431
[02-12-24 11:51:35:796 CST] 57a66b11 SystemOut U 091
[02-12-24 11:51:35:806 CST] 57a66b11 SystemOut U 10
[02-12-24 11:51:35:806 CST] 57a66b11 SystemOut U 11
[02-12-24 11:51:36:467 CST] 57a66b11 WebGroup X Servlet Error: : com.ibm.servlet.engine.srt.WriteBeyondContentLengthException
at com.ibm.servlet.engine.srt.BufferedServletOutputStream.write(BufferedServletOutputStream.java:285)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:236)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:250)
at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:233)
at pri_00025t._printtest_jsp_22._jspService(printtest.jsp :68)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(JspServlet.java:300)
at org.apache.jasper.runtime.JspServlet.serviceJspFile(JspServlet.java:430)
at org.apache.jasper.runtime.JspServlet.service(JspServlet.java:565)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.servlet.engine.webapp.StrictServletInstance.doService(ServletManager.java:827)
at com.ibm.servlet.engine.webapp.StrictLifecycleServlet._service(StrictLifecycleServlet.java:167)
at com.ibm.servlet.engine.webapp.IdleServletState.service(StrictLifecycleServlet.java:297)
at com.ibm.servlet.engine.webapp.StrictLifecycleServlet.service(StrictLifecycleServlet.java:110)
at com.ibm.servlet.engine.webapp.ServletInstance.service(ServletManager.java:472)
at com.ibm.servlet.engine.webapp.ValidServletReferenceState.dispatch(ServletManager.java:1012)
at com.ibm.servlet.engine.webapp.ServletInstanceReference.dispatch(ServletManager.java:913)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:523)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:282)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:112)
at com.ibm.servlet.engine.srt.WebAppInvoker.doForward(WebAppInvoker.java:91)
at com.ibm.servlet.engine.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:184)
at com.ibm.servlet.engine.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:67)
at com.ibm.servlet.engine.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:106)
at com.ibm.servlet.engine.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:125)
at com.ibm.servlet.engine.oselistener.OSEListenerDispatcher.service(OSEListener.java:315)
at com.ibm.servlet.engine.http11.HttpConnection.handleRequest(HttpConnection.java:60)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:323)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:252)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
Error: 500
Location: /test/pdf.jsp
Internal Servlet Error:java.lang.IllegalStateException: OutputStream is already being used for this request
at org.apache.tomcat.facade.HttpServletResponseFacade.getWriter(HttpServletResponseFacade.java:177)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:166)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:205)
at _0002fpdf_0002ejsppdf_jsp_30._jspService(_0002fpdf_0002ejsppdf_jsp_30.java:148)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:177)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:318)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:391)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
at org.apache.tomcat.core.Handler.service(Handler.java:286)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:536)
至于用JSP如何来实现,本人还不太清楚。个人之见,不当之处,可探讨。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META name="GENERATOR" content="IBM WebSphere Studio">
<TITLE>printtest.jsp</TITLE>
</HEAD>
<BODY>以及
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="com.lowagie.text.*" %>
<%@ page import="java.io.*,
java.awt.*,
java.util.*,
java.io.ByteArrayOutputStream,
javax.servlet.ServletOutputStream,
com.lowagie.text.Phrase,
com.lowagie.text.pdf.PdfWriter,
com.lowagie.text.pdf.BaseFont"
contentType="text/html;charset=GBK"
%>
<%
中所有%>到<%中间的空格回车。末尾的也要删除干净。不过实在是不建议JSP做这种事情。