最爱蓝黑

导航

servlet输出PDF到请求端

大部分时候会从HttpServletResponse取得PrintWriter实例,使用println()方法对浏览器进行字符输出,但是有时候需要对浏览器进行字节输出,这就需要用到getOutputStream()方法来取得ServletOutputStream实例。它是OutputStream的子类。下面用例子说明,浏览器请求返回pdf类型的文件。

package com.sunyongxing.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/pdf.do")
public class PdfServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String password = request.getParameter("password");
        if ("123456".equals(password)) {
            response.setContentType("application/pdf");
            InputStream in = getServletContext().getResourceAsStream(
                    "/WEB-INF/1.pdf");
            OutputStream out = response.getOutputStream();
            byte[] b = new byte[1024];
            int length = -1;
            while ((length = in.read(b)) != -1) {
                System.out.println(length);
                out.write(b, 0, length);
            }
            in.close();
            out.close();
        }
    }

}

当请求pdf.do的servlet,密码符合时就会返回pdf文件,红色标记的第一行是设置返回的类型,这里设置的是pdf类型,当浏览器不知道是什么类型时。通常会弹出另存为的提示。第二行是取得读取文件的类,第三行是取得输出的类,最后通过io操作对浏览器进行写出响应。

 

 

posted on 2012-08-04 12:26  最爱蓝黑  阅读(1256)  评论(0)    收藏  举报