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>,重定向...
                        * 给服务器使用:不需要加虚拟目录
                            * 转发路径
                    
                    

原文地址:https://www.cnblogs.com/zlnice/p/9555020.html