黑马程序员技术交流社区

标题: [成都校区]Response响应 [打印本页]

作者: 黑马大技霸    时间: 2018-11-15 14:43
标题: [成都校区]Response响应
# Response响应

### HTTP协议

        1.请求消息:

        2.响应消息:服务器发给客户端的数据

                格式:

                        1.响应行

                                1.组成:协议/版本  响应状态码   状态码描述

                                2.响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态                               

```
1.状态码都是三位数字
2.分类:
        1.1xx :服务器:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
        2.2xx :成功,代表:200
        3.3xx :重定向:代表:302(重定向),304(访问缓存)
        4.4xx :客户端错误
                代表:
                1.404(请求的路径没有对应的资源)
                2.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.设置响应头

```
setHeader(String name,String value)
```

        3.设置响应体

                使用步骤:

                        1.获取输出流

                                字符输出流:

```
Printwriter getWriter()
```

                                字节输出流

```
ServletOutputStream getOutputStream()
```

​                        2.使用输出流,将数据输出到客户端浏览器

```
//重定向代码实现
setStatus(302)
setHeader("Location",String location)

//简单的重定向方法
sendRedirect(String location)
```

```java
response.setStatus(302);
response.setHeader("Location","/d2");

response.sendRedirect("/d2");
```

        重定向的特点:

                1.重定向地址栏发生变化

                2.重定向可以访问其他服务器下的资源

                3.**重定向是两次请求**,不能使用request对象来共享数据

        转发的特点:

​                1.转发地址栏路径不变

                2.转发只能访问当前服务器下的资源

                3.转发是一次请求,可以使用request对象来共享数据

        路径分类:

                **1.相对路径**:通过相对路径不可以确定唯一资源

- 如: ./index.html

- 不以/开头,以.开头

- 规则:找到当前资源与目标资源之间的相对关系

  ```
  ./当前目录
  ../后退一级目录
  ```

         

                **2.绝对路径**:通过绝对路径可以确定唯一资源

- 以/开头的路径

- 如

  ```
  http://localhost/demo02
  /demo02
  ```

  规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出

  - 如果是给客户端用的:要加虚拟目录
    - 建议虚拟目录动态获取
  - 如果是给服务器用的:可以不加虚拟目录
    - 转发路径

**动态获取虚拟目录**:

```java
request.getContextPath()
```






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2