Web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象(req),代表响应的HttpServletResponse对象(resp)
- 如果要获取客户端请求发过来的参数:req
- 如果要给客户端响应一些信息:resp
1. 简单分类
负责向浏览器发送数据的方法
负责向浏览器发送响应头的方法
响应的状态码
2. 下载文件
1.向浏览器输出消息(...)
2.下载文件
1. 要获取下载文件的路径
2. 下载的文件名是啥?
3. 设置想办法让浏览器能够支持下载我们需要的东西
4. 获取下载文件的输入流
5. 创建缓冲区
6. 获取OutputStream对象
7. 将FileOutputStream流写入到buffer缓冲区
8. 使用OutputStream将缓冲区中的数据输出到客户端!
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 要获取下载文件的路径
String realPath = "F:\\WORK2\\javaweb-02-servlet\\servlet-03\\target\\servlet-03\\WEB-INF\\classes\\缩小灯.jpg";
System.out.println("下载文件的路径" + realPath);
//2. 下载的文件名是啥?
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
/*注:当成字符串字面值斜杠直接输出时,必须用双斜杠"\\"转义为单斜杠
Java lastIndexOf() 方法:public int lastIndexOf(int ch): 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
Java substring() 方法:substring() 方法返回字符串的子字符串;语法 public String substring(int beginIndex) 或 public String substring(int beginIndex, int endIndex);beginIndex -- 起始索引(包括), 索引从 0 开始;beginIndex -- 起始索引(包括), 索引从 0 开始。
* */
//3. 设置想办法让浏览器能够支持下载我们需要的东西
resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
//注:设置的头信息百度即可——https://www.cnblogs.com/huangui/p/12767965.html;
//resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
//注意“attachment;filename=”,不要落下“=”,否则下载的文件名全部为down
//URLEncoder使用java.net.URLEncoder包
//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))>0){
out.write(buffer,0,len);
}
in.close();
out.close();
}