1、定义下载文件的Servlet
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DownloadServlet() {
super();
}
// 完成下载功能
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
String strDir = "download";
String[] strArr = request.getRequestURI().split("/");
String strFile = strArr[strArr.length - 1];
String path = getServletContext().getRealPath("/");
File file = new File(path + File.separator + strDir
+ File.separator + strFile);
if (!file.exists()) {
response.setCharacterEncoding("UTF-8");
PrintWriter pWriter = response.getWriter();
response.setHeader("content-type", "text/html; charset=utf-8");
pWriter.println("<script language=\"javascript\" type=\"text/javascript\">alert('附件不存在!'); window.history.back(-1);</script>");
return;
}
response.setContentType("application/x-download"); // 设置格式
response.setContentLength((int) file.length());// 设置文件大小
response.setHeader("Content-Dispostion", "attachment;filename="+ strFile); // attachment设置成下载文件name
FileInputStream input = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte[] buf = new byte[2048];
int len;
while ((len = input.read(buf)) != -1) {
out.write(buf, 0, len);
}
input.close();
out.flush();
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
doGet(request, response);
}
public void process(HttpServletRequest request, HttpServletResponse response) {
doPost(request, response);
}
}
2、在web.xml中配置Servlet
<servlet>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>com.s2ss.demo.servlet.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/download</url-pattern>
<url-pattern>/download/*</url-pattern>
</servlet-mapping>
3、页面
<a href="download/filename" ><font color="red">下载这个文件</font></a>