您的位置:首页 > Web前端 > JavaScript

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

2016-10-31 17:51 519 查看
步骤如下

创建一个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而言,它的作用有三点,其一是获取表单数据,其二是调用业务逻辑,其三是分发请求

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格式文件,需要下载后显示。

最后在浏览器显示的结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jsp servlet