web服务器接收到客户端的http请求,针对这个请求 ,分别创建一个代表请求的HttpServletResponse对象,代表响应的一个HttpServletResponse;
负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;
public class down extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取下载文件的路径
String realPath ="E:\\\\eclipse\\\\javaweb_HelloServlet\\\\reponse\\\\target\\\\classes\\\\山姆.png";
System.out.println("下载路径:"+realPath);
// 2. 下载的文件名是啥
String fileName = realPath.substring(realPath.lastIndexOf("\\\\") + 1);
System.out.println("下载路径:"+fileName);
// 3. 设置想办法让浏览器能够(Content-disposition)支持下载我们需要的东西 (有中文需要设置编码)
resp.setHeader("Content-disposition","attachment;filename=" +URLEncoder.encode(fileName,"utf-8"));
// 4. 获取下载文件的输入流
FileInputStream in = new FileInputStream(realPath);
// 5. 创建缓冲区
int len =0;
byte[] buffer = new byte[1024];
// 6. 获取OutputStream对象
ServletOutputStream os = resp.getOutputStream();
// 7. 将FileOutStream流写入到buffer缓冲区,使用OutputStream将缓冲区的数据输出到客户端
while ((len=in.read(buffer))!=-1){
os.write(buffer,0,len);
}
//8.关闭流
os.close();
in.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>filedown</servlet-name>
<servlet-class>top.ltyzqhh.servlet.down</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>filedown</servlet-name>
<url-pattern>/d</url-pattern>
</servlet-mapping>