servlet实操之Response下载文件
1、HttpServletResponse
web服务器接收到客户端的Http请求,针对这个请求分别创建一个代表请求的HttpServletRequest对象和一个代表相应的HttpServletResponse对象。
~如果要获取客户端请求过来的参数 找HttpServletRequest
~如果要给客户端一些相应的数据 找HttpServletResponse
简单分类
负责向浏览器发送数据的方法
ServletOutputStream getOutputStream() throws IOException
PrintWriter getWriter() throws IOException
负责向浏览器发送响应头的方法
void addDateHeader(String name, long date);
public void setHeader(String name, String value);
public void addHeader(String name, String value);
public void setIntHeader(String name, int value);
public void addIntHeader(String name, int value);
public void setStatus(int sc);
public void setStatus(int sc, String sm);
一些响应状态码
常见应用
①向浏览器输出消息
②下载文件
1、要获取下载文件的路径
2、下载的文件名是啥
3、设置想办法让浏览器能够支持我们下载的东西
4、获取文件的下载流
5、创建缓冲区
6、获取Outputstream对象
7、将FileOutputstream流写入到buffer缓冲区
8、使用Outputstream将缓冲区中的数据输出到客户端
有一些路径的坑去看看这个文章吧:https://www.cnblogs.com/sos-blue/archive/2012/03/12/2391304.html
// 1、要获取下载文件的路径
ServletContext servletContext = this.getServletContext();
//String rpath = "C:\\Users\\user\\Pictures\\永劫无间.png";
//String rpath = "D:\\java_project\\maven_project\\ALL_JavaProject\\Response\\target\\classes\\永劫无间.png";
String path = "D:\\java_project\\maven_project\\ALL_JavaProject\\Response\\src\\main\\resources\\永劫无间.png";
// String path = servletContext.getResourceAsStream(rpath).toString();
System.out.println("下载文件的路径:"+path);
// 2、下载的文件名是啥
String filename = path.substring(path.lastIndexOf("\\") + 1);
// 3、设置想办法让浏览器能够支持我们下载的东西
resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8") );
// 4、获取文件的下载流
FileInputStream fileInputStream = new FileInputStream(path);
System.out.println(fileInputStream);
// 5、创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
// 6、获取Outputstream对象
ServletOutputStream outputStream = resp.getOutputStream();
// 7、将FileOutputstream流写入到buffer缓冲区
while ((len = fileInputStream.read(buffer)) != -1)
{
outputStream.write(buffer,0,len);
}
// 8、使用Outputstream将缓冲区中的数据输出到客户端
fileInputStream.close();
outputStream.flush();
outputStream.close();