下载文件
下载文件是指把服务器端的文件发送到客户端,Servlet能够向客户端发送任意格式的文件数据。
创建一个Servlet并实现doGet方法:
package com.gof.test.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = -2685898734668250794L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
String filename = req.getParameter("filename");
if (filename == null){
return;
}
InputStream in = getServletContext().getResourceAsStream("/reports/" + filename);
OutputStream out = resp.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(in);
BufferedOutputStream bos= new BufferedOutputStream(out);
int length =in.available() ;
// Set Response
resp.setContentType("application/force-dwonload");
resp.setHeader("Content-Length", String.valueOf(length));
resp.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
byte[] buffer = new byte[1024];
int bytesRead = -1;
while ( (bytesRead = bis.read(buffer)) != -1){
bos.write(buffer, 0, bytesRead);
}
bos.flush();
bis.close();
bos.close();
in.close();
out.close();
}
}
在web.xml中注册该servlet:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Base Java Webapp</display-name>
<description>A Basic Maven Java Webapp Application</description>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- test url: http://localhost:8080/base-webapp/download?filename=testreport.txt -->
<servlet>
<servlet-name>downloadtest</servlet-name>
<servlet-class>com.gof.test.servlet.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>downloadtest</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
</web-app>
在webapp的根目录下添加文件夹reports,并创建一个名为testreport.txt的文件:
在浏览器中访问如下URL:
http://localhost:8080/base-webapp/download?filename=testreport.txt
下载文件。