1.HttpServletResponse概述
创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大。
2.response的运行流程
Http响应
请求行
请求网址:http://localhost:8080/niuability/index.html?name=%E5%8E%BB%E5%BE%AE%E8%BD%AF
请求方法:GET
远程地址:[::1]:8080
状态码:
200
版本:HTTP/1.1
Referrer 政策:no-referrer-when-downgrade
请求头
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:8080/niuability/index.html?name=%E5%92%8C%E5%93%A6%E5%93%A6%E9%A2%9D
Upgrade-Insecure-Requests: 1
响应行
HTTP/1.1 200
响应头
Accept-Ranges: bytes
ETag: W/"262-1589972370367"
Last-Modified: Wed, 20 May 2020 10:59:30 GMT
Content-Type: text/html
Content-Length: 262
Date: Wed, 20 May 2020 11:04:09 GMT
Keep-Alive: timeout=20
Connection: keep-alive
响应体
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="helloTest" method="post">
<input type="text" name="username"></br>
<input type="submit" value="提交">
</form>
</body>
</html>
设置状态码
response.setStatus(int sc);
response.setStatus(302);
response.setStatus(404);
设置响应头
addHeader(String name, String value);
addIntHeader(String name, int value);
addDateHeader(String name, long date);
setHeader(String name, String value);
setDateHeader(String name, long date);
setIntHeader(String name, int value);
setXXX和addXXX区别
重定向
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload= function(){
var time = 5;
var secondEle = document.getElementById("second");
var timer = setInterval(function(){
secondEle.innerHTML = time;
time --;
if(time == 0){
clearInterval(timer);
location.href="http://www.niuability.cn"
}
},1000)
}
</script>
</head>
<body>
恭喜注册成功<span style="color:red" id="second">5</span>秒后点击跳转
</body>
</html>
设置响应体
getWriter();
setCharacterEncoding();
1)响应体设置文本
PrintWriter getWriter();获得字符流,通过字符流的write(String s)方法可以将字符串设置到response反冲区中,随后Tomcat会将response 缓冲区的内容组装成http响应返回给浏览器
关于设置中文乱码问题
response缓冲区默认编码是iso8859-1,此码表中没有中文,可以通过response的,setCharacterEncoding(String charset)设置 response的 编码
response.setCharacterEncoding(“utf-8”);
//通过content-Type告知客户端使用何种码表
response.setHeader(“Content-Type”, “text/html; charset=utf-8”);
response.setContextType(“text/html;charset=utf-8”);
响应头设置字节
ServletOutputStream getOutputStream();
获得字节流,通过该字节流的write(byte [] bytes)可以向缓冲区中写入字节,在由Tomcat服务器将字节内容组成Http响应返回
完成文件下载
1)什么情况下会下载
浏览器不能解析的文件就下载
2)什么情况下需要在服务器端编写文件下载的代码
理论上,浏览器可以解析的代码需要编写文件下载