JSP response对象实现文件下载的两种方式

 更新时间:2014年09月11日 17:02:43   投稿:whsnow  
这篇文章主要介绍了JSP隐含对象response实现文件下载的两种方法,很简单,但很实用,需要的朋友可以参考下

一.JSP隐含对象response实现文件下载的介绍

(1)在JSP中实现文件下载最简单的方法是定义超链接指向目标资源,用户单击超链接后直接下载资源,但直接暴露资源的URL

也会带来一些负面的影响,例如容易被其它网站盗链,造成本地服务器下载负载过重。

(2)另外一种下载文件的方法是使用文件输出流实现下载,首先通过response报头告知客户端浏览器,将接收到的信息另存

为一个文件,然后用输出流对象给客户端传输文件数据,浏览器接收数据完毕后将数据另存为文件,这种下载方法的优点是服

务器端资源路径的保密性好,并可控制下载的流量以及日志登记等。

二.以下介绍两种文件的下载方式

(1)二进制文件的下载

用JSP程序下载二进制文件的基本原理是:首先将源文件封装成字节输入流对象,通过该对象读取文件数据,获取response对象

的字节输出流对象,通过输出流对象将二进制的字节数据传送给客户端。

1.把源文件封装成字节输入流对象

2.读取二进制字节数据并传输给客户端

代码如下:

<%@ page contentType="application/x-download" import="java.io.*" %> 
<% 
int status=0; 
byte b[]=new byte[1024]; 
FileInputStream in=null; 
ServletOutputStream out2=null; 
try 
{ 
response.setHeader("content-disposition","attachment; filename=d.zip"); 
in=new FileInputStream("c:\\tomcat\\webapps\\ROOT\\d.zip"); 
out2=response.getOutputStream(); 
while(status != -1 ) 
{ 
status=in.read(b); 
out2.write(b); 
} 
out2.flush(); 
} 
catch(Exception e) 
{ 
System.out.println(e); 
response.sendRedirect("downError.jsp"); 
} 
finally 
{ 
if(in!=null) 
in.close(); 
if(out2 !=null) 
out2.close(); 
} 
%>

(2)文本文件下载

文本文件下载时用的是字符流,而不是字节流。首先取得源文件的字符输入流对象,用java.io.FileReader类封装,

再把FileReader对象封装为java.io.BufferedReader,以方便从文本文件中一次读取一行。字符输出流直接用JSP的隐

含对象out,out能够输出字符数据。

代码如下:

<%@ page contentType="application/x-download" import="java.io.*" %><% 
int status=0; 
String temp=null; 
FileReader in=null; 
BufferedReader in2=null; 
try 
{ 
response.setHeader("content-disposition","attachment; filename=ee.txt"); 
response.setCharacterEncoding("gb2312"); 
in=new FileReader("c:\\tomcat\\webapps\\ROOT\\ee.txt"); 
in2=new BufferedReader(in); 
while((temp=in2.readLine()) != null ) 
{ 
out.println(temp); 
} 
out.close(); 
} 
catch(Exception e) 
{ 
System.out.println(e); 
response.sendRedirect("downError.jsp"); 
} 
finally 
{ 
if(in2!=null) 
in2.close(); 
} 
%>

相关文章

  • jsp中实现上传图片即时显示效果功能

    jsp中实现上传图片即时显示效果功能

    上传图片时即时显示图片效果,这在项目开发中时很常见的一项功能,接下来介绍此功能的实现过程,有需要的朋友可以参考下
    2013-01-01
  • JSP学习之Servlet用法分析

    JSP学习之Servlet用法分析

    这篇文章主要介绍了JSP学习之Servlet用法,较为详细的分析了JSP中Servlet的原理、使用方法及相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • jdk与jre的区别 很形象,很清晰,通俗易懂

    jdk与jre的区别 很形象,很清晰,通俗易懂

    对于java初学者来说,往往不懂区分jdk和jre的区别,实际上这两个东西差别很大的,有必要了解一下
    2009-07-07
  • JSP实现的简单分页显示效果代码

    JSP实现的简单分页显示效果代码

    这篇文章主要介绍了JSP实现的简单分页显示效果代码,以一个完整实例形式分析了JSP针对数据库的连接、查询及分页显示实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • jsp页面中引用其他页面的简单方法

    jsp页面中引用其他页面的简单方法

    下面小编就为大家带来一篇jsp页面中引用其他页面的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • JSP实现远程文件下载保存到服务器指定目录中的方法

    JSP实现远程文件下载保存到服务器指定目录中的方法

    这篇文章主要介绍了JSP实现远程文件下载保存到服务器指定目录中的方法,涉及JSP文件传输及目录操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • jsp 生命周期详细介绍

    jsp 生命周期详细介绍

    这篇文章主要介绍了jsp 生命周期详细介绍的相关资料,JSP有编译阶段,初始化阶段,执行阶段,销毁阶段,需要的朋友可以参考下
    2017-01-01
  • JSP上传图片产生 java.io.IOException: Stream closed异常解决方法

    JSP上传图片产生 java.io.IOException: Stream closed异常解决方法

    在做jsp上传图片时,把java代码直接改成 jsp,上传时产生异常,很是疑惑,于是搜索整理了一下解决方法,需要了解的朋友可以参考下
    2012-12-12
  • JSP 制作验证码的实例详解

    JSP 制作验证码的实例详解

    这篇文章主要介绍了JSP 制作验证码的实例详解的相关资料,现在Servlet上画出验证码的图片,让其显示到页面上,再用js方法能刷新验证码,可以用ajax得到用户输入的值经过servlet跟验证码比对判断是否,并符合提示用户,需要的朋友可以参考下
    2017-08-08
  • struts2+jsp实现文件上传的方法

    struts2+jsp实现文件上传的方法

    这篇文章主要介绍了struts2+jsp实现文件上传的方法,涉及JSP基于Struts架构实现文件传输的完整技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论