又是糟心的一天,拖堂啊!!!!!!!!!!!!!!!!!!什么时候能不拖堂!!!!!!!!!!!!!!但是还是要好好总结,好好学习。
一、Http的响应报文
组成:
响应行:方法:setStatus(状态码)
响应头:方法:setHeader(key,value)
response.setHeader(“refresh”,“3;url=http://www.baidu.con”)//定时跳转
响应体:response.print();//可以写入null
response.write()//不可以写入null,会空指针异常
二、httpServletResponse对象
1.使用HttpServletResponse设置响应行
response.setStatus(500);
2.设置响应头的方法:response.setHeader(key,value);
response.setHeader(“refresh”,“3;http://www.baidu.com”);
3.转发:
response.sendRedirect("/day04/")
4.重定向和请求转发的区别(面试)
1.实现原理:请求转发在服务器内部完成的 重定向在服务器外部完成的
2.请求次数: 请求转发一次请求,重定向至少俩次请求
3.地址栏地址:请求地址不变 重定向地址栏发生改变
三、ServletContext域对象应用
【1】获取ServletContext域对象: request.getServletContext();
【2】往域对象中存值,取值,移除值:
【存数据】
context.setAttribute(“contextName”, “传智播客!”);
【取数据】
context.getAttribute(“contextName”);
【移除数据】
context.removeAttribute(“contextName”);
四、文件下载
1、文件后台下载的本质:流拷贝,将文件以流的形式从服务器发用给浏览器;
2、文件下载的步骤:两个头+两个流
两个头:
设置content-disposition头,告诉浏览器以附件的形式下载当前文件
设置mimeType头,告诉浏览器下载的文件的mimeType(可省略)
两个流:
输出流:从response中获取输出流
输入流:将文件读取到输入流中
流拷贝:将文件以流的形式发送给浏览器
<!--download.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<h2>通过超链接的方式下载资源</h2>
<a href="/downloadServlet?filename=1.zip">1.zip</a><br>
<a href="/downloadServlet?filename=2.exe">2.exe</a><br>
<a href="/downloadServlet?filename=3.txt">3.txt</a><br>
<a href="/downloadServlet?filename=4.jpg">4.jpg</a><br>
</body>
</html>
//DownloadServlet.java
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//文件下载
//filename
String filename = request.getParameter("filename");
//file
String realPath = request.getServletContext().getRealPath("resource");
File file = new File(realPath,filename);
//1、设置头信息
//告诉浏览器以附件的形式打开这个文件
response.setHeader("content-disposition","attachment;filename="+filename);
//2、设置两个流
//通过response获取输出流
ServletOutputStream out = response.getOutputStream();
//将需要下载的文件读取到输入流中
FileInputStream in = new FileInputStream(file);
//流拷贝:
int len = 0;
byte[] buff = new byte[1024*8];
while ((len = in.read(buff)) != -1) {
out.write(buff,0,len);
}
out.close();
in.close();
}
}
你们看就这么点内容,讲了一早上,不扩展,不补充,想打人,暴躁的我 。。。。。。
对了,有一个bug待解决,我不知道为什么下载的文件名都一样,奇奇怪怪的,等有了解决方法再来补充哦~