使用Servlet和JSP,如何读取一个pdf文档到页面上

来源:互联网 发布:推荐几个淘宝男装店铺 编辑:程序博客网 时间:2024/06/03 21:53

步骤如下

  1. 创建一个JSP,提供一个简易的登录功能,这个JSP的action指向了一个Servlet。
<form action="./check.do" method="get">        用户名:<input type="text" name="username"/><br>        密码:<input type="password" name="password"/><br>        <input type="submit" value="提交"/></form>

对于Servlet而言,它的作用有三点,其一是获取表单数据,其二是调用业务逻辑,其三是分发请求

  1. Servlet的代码如下:
package com.hardstudy.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("/check.do")public class CheckServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        String username=request.getParameter("username");        String password=request.getParameter("password");        if(username.trim().equals("zhangyue") && password.trim().equals("123")){//          response.setContentType("text/plain");            response.setContentType("application/pdf");//          InputStream inputStream = getServletContext().getResourceAsStream("/WEB-INF/hello.txt");            InputStream inputStream = getServletContext().getResourceAsStream("/WEB-INF/work.pdf");            OutputStream outputStream = response.getOutputStream();            writeObject(inputStream,outputStream);        }        else{            response.setContentType("text/html;charset=utf-8");//          response.getOutputStream().print("张玥大傻逼!!!");            response.getWriter().print("登录失败!!!");            request.setCharacterEncoding("UTF-8");            request.getRequestDispatcher("check.jsp").forward(request, response);        }    }    private void writeObject(InputStream is, OutputStream os){        byte[] buffer = new byte[1024];        int length = 0;        try {            while(-1!=(length=is.read(buffer))){                os.write(buffer, 0, length);            }            os.flush();        } catch (IOException e) {            e.printStackTrace();        }finally{            if(os!=null){                try {                    os.close();                    os = null;                } catch (IOException e) {                    e.printStackTrace();                }finally{                    try {                        is.close();                        is = null;                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doGet(request, response);    }}

其中核心的代码有以下几部分:

  • 将响应格式设置为application/pdf格式:
response.setContentType("application/pdf");
  • 根据上下文对象获取输入流(此处的路径是一个令人疑惑的地方):
getServletContext().getResourceAsStream("/WEB-INF/work.pdf");
  • 根据响应对象获取输出流对象,此处的输出流为ServletOutputStream,是OutputStream的子类:
ServletOutputStream outputStream = response.getOutputStream();

然后调用一个方法,这个方法就是一个纯的对Java流的操作,将输入流输出流进行交互。最后的结果会在浏览器上显示出pdf文件。

注意:可能会出现以下问题:其一,pdf的路径不正确,获取不到输入流。其二,有的浏览器不支持pdf格式文件,需要下载后显示。

最后在浏览器显示的结果

这里写图片描述

0 0
原创粉丝点击