2012-04-27 272 views
1

可能重复:
how to display a pdf file in jsp using servlet在浏览器中显示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名称),我应该在客户端的浏览器上显示从数据库检索到的文件。
我该怎么办?

回答

2

设置你的内容类型的响应PDF的

response.setContentType("application/pdf"); 

然后写的PDF内容到响应对​​象

+0

对不起苏拉杰。我不是在这里写你的代码 – ganesshkumar 2012-04-27 07:04:34

+0

如果我在Mozilla中显示“application/pdf”,但在Chrome浏览器中没有显示:( – suraj 2012-04-27 07:14:06

+0

你正在使用哪个chrome版本? – ganesshkumar 2012-04-27 07:20:39

2

的PDF不要保存到服务器上的文件,只需发送它返回到浏览器作为servlet的响应。基本上,而不是那FileOutputStream,使用OutputStream,你从ServletResponse对象调用getOutputStream()得到。您还需要设置Content-Type标头,以便浏览器知道它是PDF文件。

让servlet写入这样的硬编码路径是很危险的,因为servlet的多个实例可以在不同的线程中同时运行。 (想想如果两个人在他们的浏览器在同一时间进入你的servlet的URL会发生什么)。如果他们都在同一时间写入相同的文件,他们最终会破坏它。

相关问题