当前位置: 首页 > news >正文

ResponseHttp

文章目录

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

HTTP响应详解

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

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继承体系

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

Response设置响应数据功能介绍

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

  1. 响应行

Snipaste_2024-05-03_15-17-21.png
设置响应状态码:

void setStatus(int sc);

  1. 响应头

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. 响应体

Snipaste_2024-05-03_15-23-51.png
对于响应体,是通过字符、字节输出流的方式往浏览器写,
获取字节输出流

ServletOutputStream getOutputStream();

获取字符输出流

PrintWriter getWriter();

Response请求重定向

概述

重定向:一种资源跳转方式(服务器外部的)
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共享数据

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

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.lryc.cn/news/345195.html

相关文章:

  • 【题解】非对称之美(规律)
  • 遇到如此反复的外贸客户,你可以这样做~
  • 【数据库】简单SQL语句
  • K邻算法:在风险传导中的创新应用与实践价值
  • 【小白的大模型之路】基础篇:Transformer细节
  • Golang | Leetcode Golang题解之第73题矩阵置零
  • JMeter性能压测脚本录制
  • 缓存雪崩、缓存击穿、缓存穿透是什么、之间的区别及解决办法
  • Pytorch张量广播
  • AI算法-高数2-导数定义和公式
  • Vitis HLS 学习笔记--AXI_STREAM_TO_MASTER
  • WPF之可翻转面板
  • 【深度学习】--slowfast视频理解数据集处理pipeline
  • ArcGIS10.2能用了10.2.2不行了(解决)
  • mysql查询表信息(表名、表结构、字段信息等)
  • 【MySQL探索之旅】JDBC (Java连接MySQL数据库)
  • tomcat-GC溢出
  • 结合场景,浅谈深浅度拷贝
  • 生成指定范围的随机整数
  • 少的缓存穿透是缓存击穿,大量的是缓存雪崩
  • 设备能耗数据在线监测
  • springboot整合websocket,超简单入门
  • 代码随想录算法训练营第三十四天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
  • ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2
  • 12.轻量级锁原理及其实战
  • 栈结构(c语言)
  • 【C++】C/C++中新const用法:const成员
  • 武汉凯迪正大—钢管焊缝裂纹探伤仪
  • 为什么 IP 地址通常以 192.168 开头?
  • elementUi中的el-table合计行添加点击事件