文件下载可以说是网站的基础功能,要实现最下载功能,有一种最基本的方法,那就是将超链接的href属性指向对应的资源文件。

如下面连接指向了百度首页的图片:

I'm the index of Baidu

但这种方式的缺陷也是很明显的,目录信息被获取,不利于信息安全。其实信息安全还是其次,主要还是因为它不方便。如果直接指向资源文件,那么浏览器会自动打开图片等一些文件,而不会弹出窗口提示用户保存。

因此这种方式并不能很好地解决下载的问题。因此就有了下面的几种下载方式。

而在Java中,要实现下载功能一般有三种实现方式:

1、使用Servlet实现文件下载

2、在Struts中用Servlet实现下载

3、使用Struts框架提供的文件下载功能

其实这三种实现方式的原理都一样,都是利用InputStream从文件中读取数据,然后利用OutputStream将数据接入到返回客户端的response中。

其核心代码如下:

 1 try {
 2         InputStream inStream = new FileInputStream(file);
 3         ServletOutputStream servletOS = response.getOutputStream();
 4         byte[] buf = new byte[4096];
 5         int readLength;
 6         while((readLength = inStream.read(buf))!= -1)
 7         {
 8             servletOS.write(buf, 0, readLength);
 9         }
10         inStream.close();
11         servletOS.flush();
12         servletOS.close();
13     }
14     catch(Exception e)
15     {
16         e.printStackTrace();
17     }
18     return response;

其中第一种在Servlet中实现文件下载是最原始的下载方式。而第二种在Struts中用Servlet实现文件下载也是最原始的方式,只不过我们是在Struts的Action中进行操作,不用去创建Servlet。

而第三种则是Struts对文件下载功能进行了封装,我们只要按照其规定的配置就可以直接使用。

这几种方式各有各的优缺点,选择适合自己的方式即可。下面对上面提到的三种方式进行详细解析:

一、使用Servlet实现文件下载

这种方式性能最好,条理最清晰,但是可能代码量多了点。

准备:只需Java的JDK即可运行。

1、在web.xml中进行Servlet配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7 
 8     <!-- 文件下载  -->
 9     <servlet>
10         <servlet-name>fileDownLoadServlet</servlet-name>
11         <servlet-class>com.chanshuyi.download.FileDownLoadServlet</servlet-class>
12     </servlet>
13     <servlet-mapping>
14         <servlet-name>fileDownLoadServlet</servlet-name>
15         <url-pattern>/fileDownLoadServlet</url-pattern>
16     </servlet-mapping>
17 </web-app>
View Code

相关文章:

  • 2021-12-03
  • 2022-02-16
  • 2022-12-23
  • 2021-09-12
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-28
  • 2021-09-08
  • 2021-12-19
  • 2021-09-01
  • 2022-12-23
相关资源
相似解决方案