java之 Response

0x01、Response

​ 在Servlet API中,定义了一个HttpServletResponse接口(doGet,doPost方法的参数),它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为响应行、响应头、响应体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应头、响应体的方法

0x02、操作响应行

HTTP/1.1 200

​ 常用的状态码:

​ 200:成功

​ 302:重定向

​ 304:访问缓存

​ 404:客户端错误

​ 500:服务器错误

  1. 一般不需要设置, 可能302 重定向需要设置

0x03、操作响应头

响应头: 是服务器指示浏览器去做什么

  • 一个key对应一个value

  • 一个key对应多个value

重点关注方法:

setHeader(String name,String value);

常用的响应头

Refresh:定时跳转 (eg:服务器告诉浏览器5s之后跳转到百度)

Location:重定向地址(eg: 服务器告诉浏览器跳转到xxx)

Content-Disposition: 告诉浏览器下载

Content-Type:设置响应内容的MIME类型(服务器告诉浏览器内容的类型)

1、定时刷新

response.setHeader("refresh","秒数;url=跳转的路径"); //几秒之后跳转到指定的路径上

2、重定向

  1. 重定向两次请求
  2. 重定向的地址栏路径改变
  3. 重定向的路径写绝对路径(带域名/ip地址的, 如果是同一个项目里面的,域名/ip地址可以省略)
  4. 重定向的路径可以是项目内部的,也可以是项目以外的(eg:百度)
  5. 重定向不能重定向到WEB-INF下的资源
  6. 把数据存到request里面, 重定向不可用

实例代码:

//方式一: 重定向
//1.设置状态码
//response.setStatus(302);
//2.设置重定向的路径(绝对路径,带域名/ip地址的,如果是同一个项目里面的,域名/ip地址可以省略)
//response.setHeader("Location","http://localhost:8080/day28/demo08");
//response.setHeader("Location","/day28/demo08");
//response.setHeader("Location","http://www.baidu.com");

//方式二:  直接调用sendRedirect方法, 内部封装了上面两行
response.sendRedirect("http://localhost:8080/day28/demo08");

重定向的特点:

1. 重定向的跳转是由浏览器发起的,在这个过程中浏览器会发起两次请求
2. 重定向跳转可以跳转到任意服务器的资源,但是无法跳转到WEB-INF中的资源
3. 重定向跳转不能和request域对象一起使用
4. 重定向跳转浏览器的地址栏中的地址会变成跳转到的路径

请求转发的特点:

1. 请求转发的跳转是由服务器发起的,在这个过程中浏览器只会发起一次请求
2. 请求转发只能跳转到本项目的资源,但是可以跳转到WEB-INF中的资源
3. 请求转发可以和request域对象一起使用

0x04、操作响应体

  • 解决字符流输出中文乱码问题
response.setContentType("text/html;charset=utf-8");
  • 使用字符输出流
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        //要向浏览器输出响应体的信息,需要通过流来进行操作
        //第一种:字符串,输出文本内容
        PrintWriter writer = response.getWriter();
        //使用字符流往浏览器输出文本
        //1. writer()方法,只能输出字符串,如果输出int、float等等类型的话,则会有问题
        writer.write("你好世界");

        //2. print()方法,可以输出数字、字符串
        //writer.print(8);
    }
posted @ 2021-01-26 17:06  0X7e  阅读(230)  评论(0编辑  收藏  举报