目录
①、新建一个module:03_HttpServletResponse,并补全其目录结构。
②、创建一个Servlet:FileServlet,并在web.xml中注册
一、HttpServletResponse
web服务器收到客户端的http请求后,会分别创建一个代表请求的HttpServletRequest对象和一个代表响应的HttpServletResponse对象
如果要获取客户端请求过来的参数,找httpServletRequest
如果要响应客户端一些信息,找HttpServletRsponse
1.下载文件
通过客户端下载resources中的一张图片
①、新建一个module:03_HttpServletResponse,并补全其目录结构。
②、创建一个Servlet:FileServlet,并在web.xml中注册
<servlet>
<servlet-name>FileServlet</servlet-name>
<servlet-class>com.kuang.servlet.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/fileServlet</url-pattern>
</servlet-mapping>
③、在FileServlet中编写实现下载文件的代码
首先要获取要下载的文件的路径==>获取下载的文件的文件名==>设置让浏览器支持下载文件(content-Disposition),若文件名是中文,需要设置编码(URLEncoder.encode())==>获取下载文件的输入流==>创建缓冲区==>获取OutputStream对象==>将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区的数据输出到客户端==>关闭流
public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.获取下载文件的路径
String realPath = "F:\\JAVA\\8_KuangStudyJava\\02_JavaWeb\\01_Servlet\\代码\\maven-01-servlet\\03_HttpServletResponse\\src\\main\\resources\\zhuyin.jpg";
// 2.获取文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
// 3.设置让浏览器支持下载文件
resp.setHeader("content-Disposition","attachment;fileName=" + fileName);
// 若文件名是中文需要设置编码:
// 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 out = resp.getOutputStream();
// 7.将FileInputStream写入到buffer缓冲区中,使用OutputStream将缓冲区的数据输出到客户端
while ((len = in.read(buffer)) > 0){
out.write(buffer,0,len);
}
// 8.关闭流
in.close();
out.close();
}
}
④、运行结果