使用Servlet和JSP,如何读取一个pdf文档到页面上
2016-10-31 17:51
519 查看
步骤如下
创建一个JSP,提供一个简易的登录功能,这个JSP的action指向了一个Servlet。
对于Servlet而言,它的作用有三点,其一是获取表单数据,其二是调用业务逻辑,其三是分发请求
Servlet的代码如下:
其中核心的代码有以下几部分:
将响应格式设置为application/pdf格式:
根据上下文对象获取输入流(此处的路径是一个令人疑惑的地方):
根据响应对象获取输出流对象,此处的输出流为ServletOutputStream,是OutputStream的子类:
然后调用一个方法,这个方法就是一个纯的对Java流的操作,将输入流输出流进行交互。最后的结果会在浏览器上显示出pdf文件。
注意:可能会出现以下问题:其一,pdf的路径不正确,获取不到输入流。其二,有的浏览器不支持pdf格式文件,需要下载后显示。
创建一个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格式文件,需要下载后显示。
最后在浏览器显示的结果
相关文章推荐
- 如何在线把一个HTML页面转换成一个PDF文档?
- 如何提取PDF文档中的一个页面
- 在一个jsp页面使用include动态包含servlet
- 张志宇 SERVELET JSP学习讲义-08_SERVLET如何从上一个页面取得参数
- JSP如何在servlet将一个数据模型对象传递给jsp页面
- java web开发中,jsp使用了frameset框架,如何实现整个页面跳转,并且同一个表单中可以提交两个action
- 请问如何在Web页面中点击一个button之后,用jsp从数据库中读取数据显示到表格里
- 如何在多个页面使用同一个HTML片段
- 关于asp.net(c#),webconfig中如何定义一个字符串让所有页面共同使用?
- 救命呀!关于从数据库读取Word文档(BLOB)在JSP页面显示
- servlet2.4与jsp2.0之前jsp页面中如何解析el(转)
- 使用技巧:JSP中如何发送一个动态图像 验证码等
- JSP页面如何访问标签中定义的变量-使用实现
- jsp中如何读取一个XML文件
- 一个关于使用c语言进行对文档读取替换特定字符串
- 一是最简单的例子让你学会如何使用XML来做一个页面
- 如何在同一个页面内使用不同的超级链接,如何定义这类CSS。
- 在JSP页面中如何使用JavaBeans控件?
- WORD里,如何在同一个文档中为不同页面,设置不同的页眉和页脚
- (JSP)在文本域中显示超链接new——如何在Servlet中使用服务器端代码