你应该说明一下具体报什么错?另外,处理非HTML文件问题,Servlet比JSP要好。

解决方案 »

  1.   

    我也是从csdn上照的一个例程,想试试,结果...
      

  2.   


    源码漏了一句,
    在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)
      

  3.   

    照你写的,我试了一下,结果为:%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)
      

  4.   

    事实上,如果你在JSP中这样引用类的话,由于服务器本身就提供了一个response来完成out的任务,所以你在类中又一次产生一个out(你定义为pout),所以服务器不清楚到底该如何来处理你的请求。从逻辑上,你这段程序想输出一个什么结果也不大清楚,将PDF档嵌入到页面中(这样不行的吧)?服务器里response用来输出<html></html>之类的东东,你又想在里面输出PDF档,故造成错误的局面。你可以用SERVLET来实现这个功能,将你的东东小改一下就OK了。
    至于用JSP如何来实现,本人还不太清楚。个人之见,不当之处,可探讨。
      

  5.   

    如果真的要用JSP实现的话,需要去掉JSP页面上所有的其他out输出。如你的程序中的:
    <!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做这种事情。