Http协议 && Response
1:Http协议:响应消息
2.Response对象
3.ServletContext对象
## HTTP协议:
1.请求消息:客户端发送给服务器端的数据
* 数据格式:
1.请求行
2.请求图
3.请求空行
4.请求体
2.响应消息:服务器端发送给客户端的数据
* 数据格式:
1.响应行
1.组成:协议/版本 响应状态码 状态码描述
2.响应状态码:服务器告诉客户端浏览器本次请求和相应的一个状态
1. 状态码都是三位数字
2. 分类:
1. 1xx:服务器接受客户端消息未完成,等一段时间后发送1xx状态码询问
2. 2xx:成功。如200代表成功
3. 3xx:重定向。如302(重定向),客户端A向浏览器告知去找C。304(访问缓存)
4. 4xx:客户端错误。403(没权限),404(路径错误),405(请求方式没有对应doXXX方法)
5. 5xx:服务器端错误。500(服务器内部出现异常)
2.响应头:
1. 格式:头名称:值
2. 常见的响应头:
1. Content-Type:服务器告诉客户端本次响应体的数据格式以及编码格式,解决中文乱码
2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
* 值:
* in-line:默认值,在当前页面内打开
* attachment;filename=xxx:以附件形式打开响应体。文件下载
3.响应空行
4.响应体:传输的数据
* 响应字符串格式
## Response对象
* 功能:设置响应消息
1. 设置响应行:
1. 格式:HTTP/1.1 200 ok
2. 设置状态码:setStatus(int sc)
2. 设置响应头:setHeader(String name,String value)
addHeadder(String name,String value)
两者之间的区别?
set只能覆盖重写,而add功能是追加
3. 设置响应体:
1. 获取输出流
* 字符输出流:PrintWriter getWriter()-------- 常用!
* 字节输出流:getOutputStream()
2. 使用输出流,将数据输出到客户端浏览器
重定向的特点:redirect
1. 地址栏发生变化。
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象
转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发只是一次请求,可以使用request对象来共享数据
什么时候用请求转发,什么时候用重定向
需要携带数据用请求转发,剩下的情况两种均可
路径写法:
1. 路径分类:
1. 相对路径(不用):通过相对路径不可以确定唯一资源
* 如 ./index.html
* 不以/开头,以.开头
* 规则:确定访问当前资源和目标资源之间的的相对位置关系
* ./:代表当前目录
* ../:后退一级目录
2. 绝对路径:通过绝对路径可以确定唯一资源(基于浏览器的绝对路径:前台页面,重定向)(基于服务器的绝对路径:转发)
* 如http://localhost/day15/rsponseDemo2 /day15/rsponseDemo2
* 以/开头
* 规则:判断定义的路径是给谁用的?判断请求将来从哪发出
* 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
* 建议虚拟目录动态获取:request.getContextPath()
* <a>,<form>,重定向...
* 给服务器使用:不需要加虚拟目录
* 转发路径