ResponseHttp

devtools/2024/9/22 19:24:19/
http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • HTTP响应详解
    • 使用抓包查看响应报文协议内容
  • Response对象
    • Response继承体系
    • Response设置响应数据功能介绍
    • Response请求重定向
      • 概述
      • 实现方式
      • 重定向特点
    • 请求重定向和请求转发比较
    • 路径问题
    • Response响应字符数据
      • 步骤
      • 实现
    • Response响应字节数据
      • 步骤
      • 实现

HTTP响应详解

使用抓包查看响应报文协议内容

https://img-blog.csdnimg.cn/img_convert/e567cf633ffb8a595294ea4fa001468f.png" alt="Snipaste_2024-05-03_15-01-02.png" />
由于浏览器的原因,浏览器会把请求行和响应行信息放在一起

  1. 响应行

状态码

状态码状态码描述说明
200OK请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
302Move temporarily重定向,请求的资源临时从不同的 地址响应请求。
304Not Modified浏览器缓存中读取数据,不从服务器重新获取数据。例如,用户第一次从浏览器访问服务器端图片资源,以后在访问该图片资源的时候就不会再从服务器上加载而直接到浏览器缓存中加载,这样效率更高。
404Not Found请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。
403Forbidden服务器已经理解请求,但是拒绝执行它
405Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源
500Internal Server Error服务器内部错误。通常程序抛异常
  1. 响应头

响应头也是用的键值对key:value,服务器基于响应头通知浏览器的行为。
常见的响应头

响应头Key响应头value
location指定响应的路径,需要与状态码302配合使用,完成重定向
content-Type响应正文的类型(MIME类型,属于服务器里面的一种类型,例如文件在window系统有自己的类型,.txt .doc .jpg。文件在服务器中也有自己的类型),同时还可以解决乱码问题。例如:text/html;charset=UTF-8
content-disposition通过浏览器以附件形式解析正文,例如:attachment;filename=xx.zip
refresh页面刷新,例如:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn

常见的MIME类型:就是文件在tomcat服务器中的文件类型:

windows tomcat(MIME类型)
超文本标记语言文本 .html text/html ***
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain ***
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png **
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg **

  1. 响应体

响应体,就是服务器发送给浏览器的数据。

Response对象

Response继承体系

https://img-blog.csdnimg.cn/img_convert/5caf34a03fd6a946a24ae7560c1e2367.png" alt="Snipaste_2024-05-03_15-08-38.png" />
tomcat定义实现类ResponseFacade门面类对象。底层创建门面类对象
ServletResponse response = new ResponseFacade();
然后将响应对象传递给service doGet doPost方法参数。在方法体中就可以使用响应对象

Response设置响应数据功能介绍

http响应数据总共分为三部分内容,分别是响应行,响应头,响应体

  1. 响应行

https://img-blog.csdnimg.cn/img_convert/fca5f5dbf23e60953f6f7fa163cc8eb8.png" alt="Snipaste_2024-05-03_15-17-21.png" />
设置响应状态码:

void setStatus(int sc);

  1. 响应头

https://img-blog.csdnimg.cn/img_convert/20464bd0c969f9c679c5338fca78ece9.png" alt="Snipaste_2024-05-03_15-18-06.png" />
设置响应头键值对:

void setHeader(String name,String value);
响应头:name的值
location 指定响应的路径
content-type:告诉浏览器文件格式,告诉浏览器不要解析html文件(text/plain),解决中文乱码问题 ************
refresh 定时刷新
content-disposition 以附件形式展示图片等资源

  1. 响应体

https://img-blog.csdnimg.cn/img_convert/08656cc5e546474bb1db3bff5ea5aaba.png" alt="Snipaste_2024-05-03_15-23-51.png" />
对于响应体,是通过字符、字节输出流的方式往浏览器写,
获取字节输出流

ServletOutputStream getOutputStream();

获取字符输出流

PrintWriter getWriter();

Response请求重定向

概述

重定向:一种资源跳转方式(服务器外部的)
https://img-blog.csdnimg.cn/img_convert/368bc6a8b15a4046073f4332571ead91.png" alt="Snipaste_2024-05-03_15-39-15.png" />(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求
(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径
(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B
(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向

实现方式

resp.setStatus(302);设置响应状态码是302
resp.setHeader(“location”,“资源B的访问路径”);
或者:
resp.sendRedirect(“资源B的访问路径”);

重定向特点

  • 浏览器地址栏路径发生变化
  • 可以重定向到任何位置的资源(服务器内部,外部均可)
  • 俩次请求,不能在多个资源使用request共享数据

请求重定向和请求转发比较

https://img-blog.csdnimg.cn/img_convert/f9c8f341270245289fd590b064f3d744.png" alt="Snipaste_2024-05-03_15-53-33.png" />
如果需要在资源之间传递共享request数据,使用请求转发,否则就用重定向

路径问题

规则

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

对于转发来说,因为是在服务端进行的,所以不需要加虚拟目录
对于重定向来说,路径最终是由浏览器来发送请求,就需要添加虚拟目录。

Response响应字符数据

步骤

  1. 通过Response对象获取字符输入流:PrintWriter writer = resp.getWriter(); 由于获取打印字符流是根据response对象获取的,所以向浏览器打印输出
  2. 通过字符输出流写数据: writer.write(“aaa”);

实现

  1. 返回一个简单的字符串aaa

PrintWriter writer = response.getWriter();
writer.write(“aaa”);

  1. 返回一串html字符串,并且能被浏览器解析

PrintWriter writer = response.getWriter();
//content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签
response.setHeader(“content-type”,“text/html”);
writer.write(“

aaa

”);

  1. 返回一个中文的字符串,需要注意设置响应数据的编码为utf-8

//设置响应的数据格式及数据的编码
response.setContentType(“text/html;charset=utf-8”);
writer.write(“你好”);

:要先设置响应头,然后再用response获取输入流

Response响应字节数据

步骤

  1. 通过Response对象获取字节输出流:ServletOutputStream outputStream = resp.getOutputStream();
  2. 通过字节输出流写数据: outputStream.write(字节数据);

实现

返回一个图片给浏览器

/*** 响应字节数据:设置字节数据的响应体*/
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 读取文件FileInputStream fis = new FileInputStream("D:\\abc\\柳岩.jpg");//2. 获取response字节输出流ServletOutputStream os = response.getOutputStream();//3. 完成流的copybyte[] buff = new byte[1024];int len = 0;while ((len = fis.read(buff))!= -1){os.write(buff,0,len);}fis.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

也可以用工具:

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>

http://www.ppmy.cn/devtools/31592.html

相关文章

node.js中path模块-路径处理,语法讲解

node中的path 模块是node.js的基础语法&#xff0c;实际开发中&#xff0c;我们通过使用 path 模块来得到绝对路径&#xff0c;避免因为相对路径带来的找不到资源的问题。 具体来说&#xff1a;Node.js 执行 JS 代码时&#xff0c;代码中的路径都是以终端所在文件夹出发查找相…

C语言 | Leetcode C语言题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; int uniquePaths(int m, int n) {long long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return ans; }

生成对抗网络(GAN)入门

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 一、理论基础 1.什么是GAN GAN&#xff08…

发卡授权盗u系统源码ZHU

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板&#xff0c; 搭建系统TGaqxm01&#xff0c;最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U&#xff0c;教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.s…

Django框架之请求生命周期流程图

一、引言 WSGI、wsgiref、uwsgi三者是什么关系? WSGI是协议&#xff0c;小写的wsgiref和uwsgi是实现该协议的功能模块 缓存数据库 提前已经将你想要的数据准备好了&#xff0c;需要的时候直接拿就可以&#xff0c;提高了效率和响应时间。 eg:当你在修改你的数据的时候&…

搭建和配置Stable Diffusion环境,超详细的本地部署教程

跃然纸上的创意、瞬息万变的想象&#xff0c;Stable Diffusion以AI的力量赋予您无限创作可能。在这篇详尽的本地部署教程中&#xff0c;我们将携手走进Stable Diffusion的世界&#xff0c;从零开始&#xff0c;一步步搭建和配置这个强大的深度学习环境。无论您是热衷于探索AI艺…

搭建MongoDB副本集

文章目录 一、什么是MongoDB的副本集二、副本集的架构三、副本集的成员四、部署副本集1、节点划分2、安装MongoDB2.1、下载解压安装包 3、创建主节点3.1、创建存储数据和日志的目录3.2、新建配置文件3.3、启动节点服务 4、创建副本节点4.1、创建存储数据和日志的目录4.2、新建配…

架构设计 | 分布式与集群有什么区别

作为一名从业多年的程序员&#xff0c;对于分布式和集群这两种架构有着深入的了解。简单来说&#xff0c;分布式是将一个任务分拆到多个节点共同完成&#xff0c;而集群则是多个节点执行相同的任务。具体来说&#xff0c;分布式和集群的区别体现在以下几个方面&#xff1a; 一…