标签:java ee
在Servlet与客户的请求应答的过程中,底层是通过输入/输出流来实现的。Servlet支持两种格式的输入/输出流。一个是字符输入/输出流。ServletResponse的getWriter()方法返回一个PrintWriter对象,Servlet可以利用PrintWriter来输出字符流形式的正文数据。另一种是字节输入/输出流。ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutputStream来输出二进制的正文数据。
下面我们写一个返回PDF文件的Servlet来说明Servlet如何实现向客户端发送非HTML文档。示例代码如下:
package com.yl.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 以流的方式在网页中打开PDF文件 * * @author LYYL * */ @WebServlet(name="servlet", urlPatterns={"/pdfShow"}) public class PDFServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp); } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //设置响应内容类型为PDF类型 response.setContentType("application/pdf"); ServletOutputStream sos = response.getOutputStream(); //不在网页中打开,而是直接下载该文件,下载后的文件名为“Example.pdf” //response.setHeader("Content-disposition", "attachment;filename=Example.pdf"); File pdf = null; FileInputStream fis = null; byte[] buffer = new byte[1024*1024]; pdf = new File("D:\\test.pdf"); response.setContentLength((int) pdf.length()); fis = new FileInputStream(pdf); int readBytes = -1; while((readBytes = fis.read(buffer, 0, 1024*1024)) != -1){ sos.write(buffer, 0, 1024*1024); } sos.close(); fis.close(); } }
大家也可以在我的代码中看到一句被注释掉的代码,如果没有注释掉,则不会在浏览器中打开该PDF文件而是通知你下载该文件,下载后的文件名为:Example.pdf。
标签:java ee
原文地址:http://blog.csdn.net/yanglun1/article/details/46490677