在浏览器中打开或者下载PDF文件

在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{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {processRequest(req, resp);}@Overrideprotected 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();}} 写好以后,我们打开浏览器,在地址栏输入::8080/Servlet/pdfShow即可打开我们的页面,,页面效果就是读出PDF文件后的内容。在此说明一下Servlet是我的项目名称,pdfShow是我自己指定的urlPatterns。

大家也可以在我的代码中看到一句被注释掉的代码,如果没有注释掉,则不会在浏览器中打开该PDF文件而是通知你下载该文件,下载后的文件名为:Example.pdf。

我希望你能知道,我的心永远只为你跳动。

在浏览器中打开或者下载PDF文件

相关文章:

你感兴趣的文章:

标签云: