【Response】全面总结并理解response

 

HTTP中的响应消息和请求消息一样,分成四部分
 

  1. 响应行——格式:协议/版本 状态码 状态码描述,比如:HTTP/1.1 200 OK
    关于状态码:
    ▶ 理解:服务器告诉客户端本次请求和响应的情况。
    ▶ 3位数字
    ▶ 分类:1xx(服务器接受客户端消息,但没接受完全,等待一会后发送1xx进行询问);
         2xx(成功);
         3xx(重定向。302重定向,304访问缓存)
         4xx(客户端错误。404路径没有对应资源,405请求方式没有对应的doXxx方法)
         5xx(服务器端错误)
  2. 响应头——格式:键值对。是服务器告诉客户端的信息。
    ▶ Content-Type:本次响应体数据格式以及编码格式。比如 text/html utf-8
    ▶ Content-disposition:以什么格式打开响应体数据(inline默认当前页面打开;attachment;filename=xxx 以附件形式打开响应体,文件下载)
  3. 响应空行
  4. 响应体:传输的数据。流的形式获取

 

 

response

 
response对象的功能

与request相比比较单一 ——— 设置相应信息:

  1. 设置相应行:setStatus(int sc),设置状态码
  2. 设置响应头:setHeader(String name, String value)
  3. 设置响应体:getWriter()返回PrintWriter / getOutputStream()返回ServletOutputStream

虽然用到的方法很少,但可以完成下面的强大功能 ↓

 
重定向

// 1.设置状态码为302
response.setStatus(302);
// 2.设置响应头location
response.setHeader("location", "/虚拟目录/资源路径");


// 简单的重定向写法
response.sendRedirect("/虚拟目录/资源路径");

// 极推荐写法 (虚拟目录是动态的)
response.sendRedirect(request.getContextPath() + "/资源路径");

转发和重定向都实现了资源的跳转

重定向(redirect)的特点:地址栏改变;可以访问其他站点(服务器)的资源;两次请求,因此不能使用request对象来共享数据

转发(forward)的特点:地址栏不变;只能访问当前服务器下的资源;一次请求,因此可以使用request对象来共享数据

其实,资源路径就是相对路径,虚拟目录就是绝对路径(的一部分)
 
重定向可以访问当前服务器之外的资源,因此必须写虚拟目录+资源路径——虚拟目录用来映射到服务器;
转发是在服务器内部的资源跳转,服务器已知,自然就不需要虚拟目录了
在这里插入图片描述

浏览器 使用的资源,用 绝对路径——虚拟目录 + 资源路径

服务器 使用的资源,用 相对路径——资源路径

 
 
服务器输出字符流到浏览器

// 1.获取字符输出流
PrintWriter pw = response.getWriter();
// 2.输出数据
pw.write("<h1>hello<h1>");
() 中文乱码问题:
response对象是从tomcat自动创建的,response的流的编码方式默认是不支持中文的;
退一步讲,即使流采用支持中文的编码方式,浏览器也不一定能采用相同的解码方式。

解决方案:  response.setContentType("text/html;charset=utf-8");	(▲ 注意写在获取流之前! ! !)

这行代码有两层含义: 
	1. 服务器端的流采用utf-8编码
	2. 浏览器端也要使用utf-8解码

 
服务器输出字节流到浏览器

ServletOutputStream sos = response.getOutputStream();
sos.write("<h1>hello<h1>".getBytes());

 
 

 

关于request&response的一些理解

  1. request的作用主要是传递信息和参数,因此它的方法一般都是get,且较多,且只是用来获取信息、参数、对象,功能并不强大;response的作用数设置响应的信息,因此它们的方法一般是set,且较少,有一些完成业务的强大功能
  2. request&response遇到的中文乱码问题一般都出现在请求体/响应体中——request的解决方案是:request.setCharacterEncoding("utf-8"),response的解决方案是response.setContentType("text/html;charset=utf-8")

 

 

 

 

 

 

 

 

 

 

End ♬

by a Lolicon ✪

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值