DDR爱好者之家 Design By 杰米

一.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(); 
} 
%>
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。