Java web笔记 (5) --- Response对象详解

Response对象

一. 功能:设置响应消息

  1. 设置响应行
    1. 格式:HTTP/1.1 200 ok
    2. 设置状态码:setStatus(int sc)

  2. 设置响应头:setHeader(String name, String value)

  3. 设置响应体:
    使用步骤:

    1. 获取输出流
      字符输出流:PrintWriter getWriter()
      字节输出流:ServletOutputStream getOutputStream()
    2. 使用输出流,将数据输出到客户端浏览器

二.案例

案例1.重定向 (资源跳转的方式)

(1) 原理

在这里插入图片描述
浏览器想请求Aservlet中的资源,Aservlet中没有,于是Aservlet就响应浏览器告诉浏览器Bservlet中有它所需要的资源,并且附带Bservlet的地址。浏览器接收到响应后,通过地址再去请求Bservlet。

(2) 重定向实现

根据原理实现如下

//1. 设置状态码为302
response.setStatus(302);
 //2.设置响应头location
response.setHeader("location","/responseDemo2");

我们发现302,是固定的,"location"也是固定的,只有路径不是固定的。response中封装了这两个方法变成一个方法。如下

 //简单的重定向方法
response.sendRedirect("/responseDemo2");

示例
在这里插入图片描述
在这里插入图片描述
结果全部访问到了
在这里插入图片描述

(3) 重定向的特点:redirect (和转发特点相反)
  1. 地址栏发生变化(demo1变为demo2)
    在这里插入图片描述
  2. 重定向可以访问其他站点(服务器)的资源(可以定向到百度之类的网站)
  3. 重定向是两次请求。不能使用request对象来共享数据(因为有两个request对象了)
    在这里插入图片描述

与之相比较的转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据
*

(4) 路径写法(什么时候用需要加虚拟路径)
  • 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出,从哪发出就是给谁用
    • 给客户端浏览器使用:需要加虚拟目录
      • 比如访问服务器文件的路径,重定向
      • 建议虚拟目录动态获取:request.getContextPath()
        在这里插入图片描述
    • 给服务器使用:不需要加虚拟目录
      • 比如转发路径(服务器转发到另一个服务器)

解释
假设一个学校有两个班级这两个班级都有一个叫张三的学生。有一个外卖小哥来送外卖(送给1班的张三)。
给服务器用:好比外卖小哥在一班里喊 “张三拿外卖” 不需要加一班的前缀,因此不需要虚拟路径。
给浏览器用:好比外卖小哥站在楼底喊 “一班的张三来拿外卖” 此时就需要加一班的前缀,因此需要虚拟路径。

案例2 .response输出字符数据到浏览器

(1) 实现步骤

在这里插入图片描述
结果 乱码
在这里插入图片描述
乱码原因:编码和解码使用的字符集不一样,获取的流的默认编码是ISO-8859-1,而浏览器默认字符集是GBK
解决方法:在获取字符输出流之前,添加下图两个红框中任意一个红框中的内容即可

在这里插入图片描述

//        //设置流的默认编码
//        resp.setCharacterEncoding("utf-8");
//        //告诉浏览器服务器发送消息的数据编码,建议浏览器使用该编码
//        resp.setHeader("content-type","text/html;charest=utf-8");

		 resp.setCharacterEncoding("utf-8");
        //resp 封装好的方法
        resp.setContentType("text/html;charest=utf-8");

结果
在这里插入图片描述

扫描二维码关注公众号,回复: 11399016 查看本文章
(2) 注意事项
  • 字符流是伴随着response销毁而销毁的,不需要手动关闭
  • 使用字符流之前,无论需不需要输出中文都要加
    resp.setCharacterEncoding(“utf-8”);
    resp.setContentType(“text/html;charest=utf-8”);
    这是一种好习惯

案例3 .response输出字节数据到浏览器

  • 步骤:
    1. 获取字节输出流
    2. 输出数据
    也要设置为相同的编码集
    在这里插入图片描述
    结果
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43507104/article/details/107173957