JSP文件下载功能的4种方法

对于网站来说,网站本身常常需要提供一些资源或者资料进行下载,说到下载莫过于最原始的方法就是在网页上提供下载的网址。今天讲述的还有另外的几种实现文件下载的方法,对于哪种方法更好这也是看自己的需求。

1、最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。 
2、在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地,示例如下:

<%
response.setContentType(fileminitype);
response.setHeader("Location",filename);
response.setHeader("Cache-Control", "max-age=" + cacheTime);
//filename应该是编码后的(utf-8)
response.setHeader("Content-Disposition", "attachment; filename=" + filename); 
response.setContentLength(filelength);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(filepath);
byte[] buffer = new byte[1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputStream = null;
%>

3、既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。

servlet端示例

public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType(" text/plain ");
OutputStream outputStream = null;
try {
outputStream = res.getOutputStream();
//把文件路径为srcFile的文件写入outputStream中
popFile(srcFile, outputStream)) ;
} catch (IOException e) {
e.printStackTrace(); 
}
}

 JApplet端示例

URLConnection con;
try {
//url是被调用的SERVLET的网址 如 *.do 
con = url.openConnection();
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-Type",
"application/octet-stream");
InputStream in = con.getInputStream();
ProgressMonitorInputStream pmInputStream = new ProgressMonitorInputStream
(pane, "正在从服务器下载文件内容", in);
ProgressMonitor pMonitor = pmInputStream.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
//localfilepath本地路径,localstr文件文件夹,filename本地文件名
String localfilepath = localstr + filename ;
//方法saveFilsaveFilee是把输入流pmInputStream写到文件localfilepath中 
if(saveFilsaveFilee(localfilepath,pmInputStream)){
openLocalFile(localfilepath);
}

4、顺便把JApplet上传文件的代码也贴上来。

 JApplet端示例

URLConnection con;
try {
con = url.openConnection();
//url是被调用的SERVLET的网址 如 *.do 
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Content-Type","application/octet-stream"); 
OutputStream out = con.getOutputStream();
//localfilepath本地路径,localstr文件文件夹,filename本地文件名
String localfilepath = localstr + filename;
//文件getOutputStream是把文件localfilepath写到输出流out中
getOutputStream(localfilepath,out);
InputStream in = con.getInputStream();
return true;
}catch (IOException e) {
System.out.println("文件上传出错!");
e.printStackTrace();
}

servlet端代码示例

public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType(" text/plain ");
InputStream inputStream = null;
try {
inputStream = res.getInputStream();
//把输入流inputStream保存到文件路径为srcFile的文件中
writefile(srcFile, inputStream);
} catch (IOException e) {
e.printStackTrace();
}
} // end service

总结:在文件的传输中是流的形式存在的,在硬盘上是文件的形式存在的。我们要做的只是通过HttpServletRequest和HttpServletResponse,或者是response和request来发送流和读取流。以及把文件转换成流或把流转换成文件的操作。

以上就是JSP文件下载功能的方法,希望有一种方法可以适合你,帮助大家解决JSP文件下载功能的实现问题。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
在JSP中,获取客户端IP的方法为:request.getRemoteAddr()。这种方法在大部分情况下都是有效的,但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:3306/ 的URL反向代理为http://www.8888.com/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。 经

JSP随机验证图片如何制作 - 2015-10-03 14:10:17

小编整理了一篇关于模仿腾讯随机验证图片的文章。下面直接上代码吧!一个Java 类和一个JSP 页面。 Java类代码: 以下是JSP模仿腾讯随机验证图片引用片段: package icewee.image;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.geom.Li
网站上的文章用什么存储?使用Oralce用CLOB存储,Java操作CLOB的方法网上很多,可是发现读取后显示在网页上和录入时的格式完全不同,该有的段落已经不复存在。 由于页面中使用的是textarea标签而不是强大的网页文本编辑器,所以要自己处理格式的问题了,下面是我找到的一个专业函数, 使用它将前台传过来的文章字符串转义一下再存入数据库,这次再读取出来的文章就有段落的显示了。 JSP保存到数据库丢失格式的解决方法代码引用: /** * 格式化文章信息,保持文章的格式。保存时用。 * * @param

黑马程序员-反射学习笔记 - 2015-10-02 17:10:07

------a href=#> 类的加载:        当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。   加载:         就是指将class文件读入内存,并为之创建一个Class对象。        任何类被使用时系统都会建立一个Class对象。 连接:        验证:是否有正确的内部结构,并和其他类协调一致        准备:负责为类的静态成员分配内存,并设置默认初始化值        解析:将类的二进制数据中的符号引用

黑马程序员-IO学习笔记 - 2015-10-02 17:10:05

------a href=#> ------ ----------------------------------------IO流---------------------------------------- IO流:按读、写方式分: 1.字节流:      1).输出流:OutputStream(抽象类):(三个写的方法)                             |--FileOutputStream(基本流):(1.输出一个字节,一个字节数组,一个字节数组的一部分)       
------a href=#> ----------------------------------------线程的概念---------------------------------------- 线程的概念:   1.我们之前的程序都是"单线程"程序:代码一行一行执行,后面的代码总要等到前面的代码执行完毕,才能获得执行;如果前面的代码很复杂,或者被阻塞,后边的代码就不会被执行得到;   2.我们可以将一些代码作为一个"独立"的线程去执行,这样在主程序,将线程启动后,这个线程中的代码就会和主程序的代
------a href=#> ----------------------------------------正则表达式---------------------------------------- 正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 我们都在Windows下查找过某些文件:        例如:               查找所有的word文档:*.doc 正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能
------a href=#> --------------------------------------------java.lang.String类-------------------------------------------- java.lang.String类:String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 1.此类被定义为final,不能被继承; 2.在Java中,"字符串"是用String类的对象 表示的; 3.字符串是常量;
------a href=#> ----------------------------------------网络编程概述---------------------------------------- 计算机网络:       是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程:        就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 网络模型:
------a href=#> ----------------------------------------java.util.Random(类)---------------------------------------- java.util.Random(类):此类的实例用于生成伪随机数流。 构造方法:         Random() : 创建一个新的随机数生成器。          Random(long seed) : 使用单个 long 种子创建一个新的随机数生成器。  成员方法: