javaweb学习10:Response下载文件
作者:互联网
javaweb学习10:Response下载文件
-
HttpServletResponse对象:
-
web服务器接收到客户端的HTTP请求,会针对这个请求,分别创建一个代表请求的HttpServletRequest对象,一个代表响应的HttpServletResponse对象;
-
如果要获取我们客户端请求过来的参数:找HttpServletRequest;
-
如果要给客户端响应一些信息:找HttpServletResponse;
-
-
简单分类:
-
负责向浏览器发送数据的方法:
ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException; -
负责向浏览器发送响应头的方法:
void setCharacterEncoding(String var1);
void setContentLength(int var1);
void setContentLengthLong(long var1);
void setContentType(String var1);
void setDateHeader(String var1, long var2);
void addDateHeader(String var1, long var2);
void setHeader(String var1, String var2);
void addHeader(String var1, String var2);
void setIntHeader(String var1, int var2);
void addIntHeader(String var1, int var2); -
响应的状态码:
int SC_OK = 200;
int SC_NOT_FOUND = 404;
int SC_INTERNAL_SERVER_ERROR = 500;
int SC_BAD_GATEWAY = 502;
-
-
常见应用:
-
向浏览器输出消息;
-
下载文件;
-
要获取下载文件的路径;
-
下载的文件名是什么;
-
设置让浏览器支持下下载我们需要的东西;
-
获取下载文件的输入流;
-
创建缓冲区
-
获取OutputStream对象;
-
将FileOutputStream流写入到buffer缓冲区;
-
使用OutputStream将缓冲区中的数据输出到客户端;
-
-
-
代码案例:
/**
* 下载文件
*/
public class FileServlet extends HttpServlet {
/**
* 1. 要获取下载文件的路径;
* 2. 下载的文件名是什么;
* 3. 设置让浏览器支持下下载我们需要的东西;
* 4. 获取下载文件的输入流;
* 5. 创建缓冲区
* 6. 获取OutputStream对象;
* 7. 将FileOutputStream流写入到buffer缓冲区;
* 8. 使用OutputStream将缓冲区中的数据输出到客户端;
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 要获取下载文件的路径;
//String realPath = this.getServletContext().getRealPath("/1.png");
String realPath = "D:\\demo\\1.PNG";
System.out.println("下载文件的路径;"+realPath);
//2. 下载的文件名是什么;
String fileName = realPath.substring(realPath.lastIndexOf("//") + 1);
//3. 设置让浏览器支持下载我们需要的东西
//中文文件名需要使用URLEncoder.encode()编码,否则有可能乱码
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. 将FileOutputStream流写入到buffer缓冲区;
//8. 使用OutputStream将缓冲区中的数据输出到客户端;
while ((len=in.read(buffer))!=-1){
out.write(buffer,0,len);
}
out.close();
in.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
标签:10,var1,String,int,void,缓冲区,Response,下载,javaweb 来源: https://www.cnblogs.com/xiangcai0522/p/16060345.html