添加一个新的jsp:download.jsp
<!-- 静态下载 -->
<a href="downloadTest.txt">download downloadTest.txt</a>
<br>
<br>
<!-- 动态下载 -->
<a href="downloadServlet">download pdf</a>
两种方式:静态下载可以直接返回一个文件。
在根目录添加一个txt文件如下:
使用ie访问:点击后直接在页面中打开了此txt,也可以使用右键,目标另存为,保存到本地:
动态下载是指下载的内容可能需要动态生成,需要访问数据库等。下面也只做一个简单的例子,点页面中的下载按钮后下载服务器电脑中固定位置的一个文件:
下载一共分三步:
1) 设置ContentType响应头,响应的类型为“下载的文件”
response.setContentType("application/x-msdownload");
2) 设置Content-Disposition响应头,通知浏览器不要自行处理要下载的文件,而是需要手工完成
response.setHeader("Content-Disposition", "attachment;filename=xx.pdf");
3) 以IO流的方式将文件数据发送给客户端
ServletOutputStream out = response.getOutputStream();
Servlet完整代码如下:
@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置ContentType响应头,响应的类型为“下载的文件”
response.setContentType("application/x-msdownload");
String fileName = "newName.pdf";
// 设置Content-Disposition响应头,通知浏览器不要自行处理要下载的文件,而是需要手工完成
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName));
// 以IO流的方式将文件数据发送给客户端
ServletOutputStream out = response.getOutputStream();
String realFilePath = "d:\\javaweb-workspace\\uploadFile\\课件.pdf";
InputStream in = new FileInputStream(realFilePath);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1){
out.write(buffer, 0, len);
}
in.close();
}
}
运行,使用IE访问,点击下载pdf按钮:将文件下载到指定路径:
到此下载成功。