浅析JSP文件下载的几种不同方式

开发 后端
本文将简单介绍JSP文件下载的几种不同方式,包括最简单的把文件地址直接放到HTML页面的一个链接中、把文件转换成输出流等等内容。

1.最直接最简单的JSP文件下载,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。

2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(JSP文件下载示例如下)

  1. <%  
  2.  response.setContentType(fileminitype);  
  3.  response.setHeader("Location",filename);  
  4.  response.setHeader("Cache-Control", "max-age=" + cacheTime);  
  5.  response.setHeader("Content-Disposition", "attachment; filename=" + filename); //filename应该是编码后的(utf-8)  
  6.  response.setContentLength(filelength);  
  7.  OutputStream outputStream = response.getOutputStream();  
  8.  InputStream inputStream = new FileInputStream(filepath);  
  9.  byte[] buffer = new byte[1024];  
  10.  int i = -1;  
  11.  while ((i = inputStream.read(buffer)) != -1) {  
  12.   outputStream.write(buffer, 0, i);  
  13.   }  
  14.  outputStream.flush();  
  15.  outputStream.close();  
  16.  inputStream.close();  
  17.  outputStream = null;  
  18.  
  19. %> 

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

servlet端示例  

  1. public void service(HttpServletRequest req, HttpServletResponse res)  
  2.            throws ServletException, IOException {  
  3.        res.setContentType(" text/plain ");  
  4.        OutputStream outputStream = null;  
  5.        try {  
  6.            outputStream = res.getOutputStream();  
  7.            popFile(srcFile, outputStream)) ;//把文件路径为srcFile的文件写入到outputStream中。  
  8.        } catch (IOException e) {  
  9.            e.printStackTrace();  
  10.        }  
  11.    }  

JApplet端示例

URLConnection con;

【编辑推荐】

  1. 浅析JSP HTTP服务器支持CGI
  2. 使用JSP页面生成PDF报表
  3. JSP自定义标签定义步骤
  4. 详解测试JSP容器
  5. 介绍JSP HTTP服务器实现的以下特性
责任编辑:彭凡 来源: xgdown.com
相关推荐

2010-07-16 13:41:08

SQL Serverl

2010-02-26 13:34:50

WCF编码机制

2018-10-22 10:30:58

命令Fedora操作系统

2020-04-24 16:09:57

UbuntuLinux内核

2020-04-20 14:30:54

UbuntuLinux内核

2010-02-04 15:41:10

C++内存管理

2019-12-09 10:30:42

Windows 10帐户Windows

2010-02-23 09:58:21

WCF客户端验证

2010-03-01 15:21:57

WCF死锁

2009-07-06 17:11:38

Servlet文件上传

2010-02-05 10:30:02

C++操作符重载

2015-07-08 16:07:19

iOSObjective-C

2010-02-06 14:12:54

C++继承方式

2010-02-04 10:33:40

C++异常传递

2010-09-25 15:25:52

2009-07-14 10:47:47

MyEclipse J

2010-09-02 10:15:46

SQL删除

2010-02-04 16:52:45

C++显式转换

2010-02-23 14:24:50

WCF状态保存

2009-06-29 17:39:31

JSP设计模式
点赞
收藏

51CTO技术栈公众号