首先上图
在对继承关系有了一个概念之后,我们进入正题:
response是由服务器创建的,在处理request并进行一系列处理过后,将处理后的信息封装为response对象,最后通过http协议返回给客户端
与我们学习request类似,我们先打印这个对象信息:
与request类似,也是有tomcat内部实现,具体分析参考我另一篇文章:
https://blog.csdn.net/Alphr/article/details/104593902
Response工作流程
Response响应数据
如图:
http协议相应数据格式:
1.响应行:
http协议版本 | 状态码 | 状态码描述 |
---|---|---|
HTTP/1.1 | 200 | OK |
2.响应头:
- Content-Type: text/html
- Content-Length: 137
- Date: Sun, 01 Mar 2020 10:19:50 GMT
3.响应空行
4.响应体
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello
</body>
</html>
1.状态码
响应状态码:服务器告诉客户端(浏览器)本次请求和响应的一个状态
- 状态码都是3位数字
- 分类:
- 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间以后,发送1xxx状态码
- 2xx:成功,代表:200
- 3xx:重定向,代表:302(重定向)304(访问缓存)
- 4xx:客户端错误,代表404(请求路径中没有响应的资源)405(请求方式与处理方法没有对应)
- 5xx:服务端错误,代表500(服务器内部错误)
2.重定向
代码实现:
//方式一
resp.setStatus(302);
resp.setHeader("location","/TestResponse/Demo2");
//方式2
resp.sendRedirect("/TestResponse/Demo2");
重定向特点(redirect):
- 地址栏发生变化
- 可以访问当前服务器外的资源
- 两次request请求,不能用request对象来共享数据
路径写法:
1.相对路径:通过相对路径不可以确定唯一资源
如./index.html
2.绝对路径:通过绝对路径可以确定唯一资源
如http://localhost/TestResponse/Demo2
或省略写法/TestResponse/Demo2
路径 | 确定资源 | 写法 | 规则 |
---|---|---|---|
相对路径 | 通过相对路径不可以确定唯一资源 | ./index.html,不以/开头 | 找到当前资源与目标资源之间的相对位置关系 |
绝对路径 | 通过绝对路径可以确定唯一资源 | 如http://localhost/TestResponse/Demo2或省略写法/TestResponse/Demo2 | 判断定义的路径是给谁用的,判断请求从哪里出发,给客户端使用:需要加虚拟目录(项目访问路径),给服务器使用:不加虚拟目录 |
建议动态获取虚拟目录
String path = request.getContextPath() ;response.sendRedirect(path+"/Demo2")
请求转发使用相对路径,重定向使用绝对路径
3.设置响应消息
- 设置状态码:setStatus(int sc)
- 设置响应头:setHeader(String name,String value)
- 设置响应体:
- 1
- 获取输出流:PrintWriter getWriter()
- 字节输出流:ServletOutputstream getOutputstream()
- 2.使用输出流,将数据输出到客户端
- 1