<servlet>
<servlet-name>downLoad</servlet-name>
<servlet-class>controller.DownLoadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>downLoad</servlet-name>
<url-pattern>/downLoad</url-pattern>
</servlet-mapping>
download.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
</head>
<body>
<a href="downLoad?fileName=美甲.txt">下载</a>
</body>
</html>
package controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
public class DownLoadController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取请求传递的文件名(需要下载的文件)
String fileName=req.getParameter("fileName");
//2.通过fileName找到服务器中真实的文件,找到文件需要一个输入流来读取文件内容
InputStream is=new FileInputStream("D://Test//"+fileName);
//3.如果文件名含有中文,可能出现乱码问题,可以通过以下方式解决
fileName= URLEncoder.encode(fileName,"UTF-8");
//4.设置响应的contentType
resp.setContentType("application/x-msdownload");
resp.setHeader("Content-disposition","attachment;filename="+fileName);
//5.将内容响应回浏览器
OutputStream os= resp.getOutputStream();
byte[] b=new byte[1024];
int length=is.read(b);
while (length!=-1){
os.write(b,0,length);
os.flush();
length=is.read(b);
}
}
}