在浏览器中显示pdf文件?
可能重复:
如何使用servlet在jsp中显示pdf文件
我从我的数据库中检索pdf文件并将其放在这样的文件中
String str="select * from files where name='Security.pdf';"; Statement stmt2= conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); rs = stmt2.executeQuery(str); while(rs.next()) { InputStream input = rs.getBinaryStream("content"); //to create file File f=new File("c:/pdfile.pdf"); OutputStream out=new FileOutputStream(f); byte buf[]=new byte[1024]; int len; while((len=input.read(buf))>0) out.write(buf,0,len); out.close(); input.close(); System.out.println("\nFile is created.."); }
现在这是在服务器端。 在我的客户端,每当用户在我的jsp页面中点击链接说href = pdf(pdf是我的servlet名称)时,我应该在客户端的浏览器上显示从数据库中检索到的文件。
我该怎么办?
将响应的内容类型设置为pdf
response.setContentType("application/pdf");
然后将pdf内容写入响应对象
不要将PDF保存到服务器上的文件中,只需将其作为servlet的响应发送回浏览器即可。 基本上,使用您在ServletResponse
对象上调用getOutputStream()
获得的OutputStream
,而不是FileOutputStream
。 您还需要设置Content-Type标头,以便浏览器知道它是PDF文件。
让servlet写入这样的硬编码路径是危险的,因为servlet的几个实例可以在不同的线程中同时运行。 (想想如果两个人同时在他们的浏览器中输入你的servlet的URL会发生什么。)如果他们同时写入同一个文件,他们最终会破坏它。
- Hibernate – Custom Dialect的BigDecimal列映射
- Spring:hibernate + ehcache
- 如何在Java中生成特定范围内的随机整数?
- MultiThreading与ThreadPoolExecutor
- Hibernate问题:外键必须与引用的主键具有相同数量的列
- 使用java读取unicode文本文件
- selenium获得元素的自然高度和宽度。 不应该依赖style属性。 GetSize(),GetLocation()和getRect()都无法执行此操作
- maven-site plugins 3.3 java.lang.ClassNotFoundException:org.apache.maven.doxia.siterenderer.DocumentContent
- Java相当于JavaScript的String.match()