【JavaWeb】Http请求与响应

文章目录

  • Http 请求与响应
  • 一、Http 请求格式
    • 1、请求行
    • 2、请求头
    • 3、请求体(post请求才有)
  • 二、HttpServletRequest
    • 1、获取 请求行 信息
    • 2、获取 请求头 信息
    • 3、获取 请求参数 信息
  • 三、Http 响应格式
    • 1、响应行
    • 2、响应头
    • 3、响应体(正文)
  • 四、HttpServletResponse
    • 1、设置 响应行 信息
    • 2、设置 响应头 信息
    • 3、设置 响应体 信息
  • 五、附录
    • 1、状态码
    • 2、MIME 扩展名
    • 3、编码问题

Http 请求与响应

一、Http 请求格式

1、请求行

# 格式POST:请求方式 请求地址 请求协议/版本号GET: 请求方式 请求地址?请求参数 请求协议/版本号 
# 举例POST /app/static/login.html HTTP/1.1GET  /app/static/login.html?username=jack&password=123 HTTP/1.1

2、请求头

# 格式name: valuename  --> 请求头名称,固定值,可能重复value --> 对应的属性值,动态变化# 常见请求头   ---------------------------------------------------【了解】
1. Host: localhost:8080          访问的服务器地址(域名+端口)
2. Connection: keep-alive        长连接(http1.1协议)	
3. Upgrade-Insecure-Requests:1   客户端支持https加密协议  ---------------------------------------------------【重点】
4. Referer: http://baidu.com     上一次访问的地址(用于防盗链...)	
5. User-Agent: xxx			     客户端的系统和浏览器版本(如下所示)以谷歌浏览器为例:User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) Chrome/63.0 Safari/537.36浏览器兼容性:服务器会根据用户的浏览器版本,返回响应的数据(相应的浏览器可以解析的数据)

3、请求体(post请求才有)

# 格式参数名=参数值&参数名=参数值...# 例如username=jack&password=123...		# 注意get方式没有请求体,post方式才有post的请求参数是放在请求体中的

二、HttpServletRequest

  • 原理:Tomcat 支持 HTTP 协议,用户通过浏览器请求服务器时,Tomcat 会将 请求的信息 都封装在 Request 对象中。
  • 作用:开发人员可以通过 Request 对象,获取浏览器发送给服务器的请求信息。
public interface HttpServletRequest extends ServletRequest {...}
ServletRequest  (JavaEE中的接口,兼容大部分协议)|
HttpServletRequest (JavaEE中的接口,HTTP协议)

1、获取 请求行 信息

请求行: GET  /test/requestDemo  HTTP/1.1
public interface HttpServletRequest extends ServletRequest {// 获取请求方式 --> GET/POSTString getMethod();// 获取URL --> http://localhost:8080/test/requestDemoStringBuffer getRequestURL();// 获取URI --> /test/requestDemoString getRequestURI();// 获取协议和版本号 --> HTTP/1.1String getProtocol();// 获取客户端ip --> 0:0:0:0:0:0:0:1String getRemoteAddr();
}

2、获取 请求头 信息

public interface HttpServletRequest extends ServletRequest {// 获取指定请求头名称 对应的值(名称不区分大小写)String getHeader(String name);// 获取所有请求头的名称(Enumeration是Iterator迭代器前身)Enumeration<String> getHeaderNames();
}

Tips:如果在浏览器抓包时,看不到某个header,就表示这个header所对应的值是null

3、获取 请求参数 信息

虽然GET请求的参数在请求行,POST请求的参数在请求体,但是都可以使用下列方法来获取请求参数。

public interface HttpServletRequest extends ServletRequest {// 获取指定参数名对应的值 --> username - jackString getParameter(String name);// 获取指定参数名对应的值数组 --> hobby - [drink, perm]String[] getParameterValues(String name);// 获取所有参数名和对应的值数组,封装到map集合Map<String,String[]> getParameterMap();
}

三、Http 响应格式

1、响应行

格式: 协议/版本号 状态码
举例: HTTP/1.1 200

2、响应头

格式: 响应头名称: 响应头的值
举例: Content-Length: 5 (指的是响应体内容长度5个字符)
# 常见响应头
1. Refresh: 在指定间隔时间后,跳转到某个页面		Refresh:5;http://www.tb.cn2. Content-Type:服务器告诉客户端,返回响应体的数据类型和编码方式Content-Type:text/html;charset=utf-83. Location:通常与状态码302一起使用,实现重定向操作Location:http://www.tb.cn4. Content-Disposition:服务器告诉客户端,以什么样方式打开响应体* in-line(默认):浏览器直接打开相应内容,展示给用户* attachment;filename=文件名:浏览器以附件的方式保存文件 【文件下载】

3、响应体(正文)

服务器返回的数据,由浏览器解析后展示给用户

四、HttpServletResponse

  • 原理:服务器向浏览器返回请求响应时,Tomcat 会将 响应的信息 都封装在 Response 对象中。
  • 作用:开发人员可以通过 Response 对象,获取服务器返回给浏览器的响应信息。
public interface HttpServletResponse extends ServletResponse {...}
ServletResponse  (JavaEE中的接口,兼容大部分协议)|
HttpServletResponse (JavaEE中的接口,HTTP协议)

1、设置 响应行 信息

public interface HttpServletResponse extends ServletResponse {// 设置状态码(通常是由tomcat服务器 自动响应 给浏览器,不需要手动设置)void setStatus(int sc);
}

2、设置 响应头 信息

public interface HttpServletResponse extends ServletResponse {// 设置 headervoid setHeader(String name, String value);
}
// value值可以由多个参数组成,不同参数之间使用分号隔开
response.setHeader("name", "value1;value2");

3、设置 响应体 信息

public interface HttpServletResponse extends ServletResponse {// 字符输出流 : 用于向浏览器输出字符数据 (文本)PrintWriter getWriter();// 字节输出流 : 用于向浏览器输出二进制数据 (文件)ServletOutputStream getOutputStream();
}
String responseData = "这是ResponseData";
response.getWriter().print(responseData);byte[] bytes = responseData.getBytes(StandardCharsets.UTF_8);
response.getOutputStream().write(bytes);

五、附录

1、状态码

在这里插入图片描述

200: 请求和响应都OK302: 重定向
304: 浏览器从缓存中加载数据(如果是从缓存中获取的数据,状态码是304;否则是200)400: 请求参数有误
401: 未授权(未登录)
403: 禁止访问(登录了,没有权限)
404: 请求的路径错误或请求的资源不存在
405: 请求的 Method 不正确(如:POST请求写成了GET请求)
406: 请求的 MediaType 不支持
415: 请求的 MediaType 不正确500: 服务器内部异常    

2、MIME 扩展名

windows 系统文件扩展名MIME 邮件中使用文件扩展名(主类型/子类型)
txttext/plain
htmltext/html
jsonapplication/json
jpgimage/jpeg
avivideo/x-msvideo

具体映射关系 可以在 tomcat安装目录/conf/web.xml 文件查看

3、编码问题

出现编码问题,一般是由于编解码所使用的字符集不一致导致的。(浏览器通常使用)

  • 浏览器:默认使用 UTF-8 编码
  • 服务器:Tomcat 默认使用 ISO-8859-1 编码

对于请求,设置服务器的解码格式。通常在处理请求之前设置编码可以避免乱码问题。

request.setCharacterEncoding("UTF-8");

对于响应,设置浏览器的解码格式(默认由 Tomcat 设置为 ISO-8859-1)

// 服务器告诉浏览器: 以 text/html 的格式 解析 响应体;以 utf-8 的 字符集 解码 响应体
response.setHeader("content-type", "text/html;charset=utf-8"); 
response.setContentType("text/html;charset=UTF-8");

Spring Boot 在启动时,会自动将请求和响应的编码设置为 UTF-8,以确保默认的字符处理不会出现乱码问题。

可以通过配置文件(如 application.propertiesapplication.yml)进行编码设置:

spring:web:encoding:charset: UTF-8enabled: true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413989.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杨辉三角

题目 给定一个非负整数 numRows&#xff0c;生成杨辉三角的前 numRows 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ]参考答案 class Solution { public:vector<vector<int>…

Centos 下载和 VM 虚拟机安装

1. Centos 下载 阿里云下载地址 centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2. VM 中创建 Centos 虚拟机 2.1 先打开 VM 虚拟机&#xff0c;点击首页的创建新的虚拟机 2.2 选择自定义&#xff0c;然后点击下一步。 2.3 这里默认就好&#xff0c;继续选择下一…

JavaWeb学习——Maven高级使用学习

一、分模块设计与开发 1、分模块设计原因 Maven 的分模块设计主要有以下几个原因&#xff1a; 1. 模块化管理&#xff1a;在大型项目中&#xff0c;代码量通常会非常大&#xff0c;如果将所有的代码都放在一个模块中&#xff0c;会使得项目结构复杂&#xff0c;不利于代码的管…

大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【安全科普】学完网络安全出去能做什么工作?

想要了解学完网络安全工程师就业班后&#xff0c;出去能做什么工作&#xff0c;这个时候会分甲方或是乙方&#xff0c;看个人更偏向哪个岗位。 甲方指的是政府、海关、税务机构、高校及其他国有银行、商业银行&#xff0c;以及移动运营商&#xff08;如中国移动、中国联通、中…

【前缀和算法】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇我们来赏析前缀和算法的进阶题目。 &#x1f3e0; 和可被K整除的子数组 &#x1f4cc; 题目解析 和可被k整除的子数组 &#x1f4cc; …

线性回归算法详解

目录 线性回归算法 线性回归方程 误差项分析 似然函数求解 线性回归求解 梯度下降算法 下山方向选择 梯度下降优化 梯度下降策略对比 学习率对结果的影响 代码实现 线性回归算法 线性回归是回归算法中最简单、实用的算法之一&#xff0c;在机器学习中很多知识点都是…

【网络】数据链路层协议——以太网,ARP协议

目录 1.局域网转发 2.MAC地址 2.1.什么是MAC地址 2.2.Mac地址的作用 2.3.MAC地址和IP地址的区别和联系 3.以太网协议 4.MTU&#xff0c;IP MTU&#xff0c;MSS 4.1.MTU 4.2. IP MTU 4.3. MSS 4.4. 区别及联系 5.局域网的数据碰撞 5.1.局域网内通信过程 5.2.数据碰…

宏集MIRO-L230工业路由器: 一站式全球联网解决方案

在日益互联的世界中&#xff0c;全球覆盖的稳定连接已成为业务成功的关键因素。宏集非常高兴地向您介绍我们的最新创新产品——MIRO-L230工业路由器&#xff0c;这是一款为现代企业量身定制的LTE路由器&#xff0c;为用户带来前所未有的稳定连接体验。 宏集MIRO-L230工业路由器…

墨兰:花语寓意、神秘传说与独特魅力全解析

在繁花似锦的植物世界中&#xff0c;墨兰宛如一位优雅的隐士&#xff0c;静静地散发着独特的魅力。它那婀娜的身姿和淡雅的芬芳&#xff0c;仿佛在诉说着一个个古老而神秘的故事。当我们凝视着墨兰&#xff0c;不禁会被它那独特的气质所吸引&#xff0c;想要探寻它背后隐藏的花…

电容的分类

电容作为电子产品中不可或缺的元件&#xff0c;其种类繁多&#xff0c;各具特色。以下是电容的主要分类、作用及优缺点概述&#xff1a; 一、电容的分类 电容的分类方式多样&#xff0c;常见的分类方式包括按结构、用途、电解质类型及制造材料等。 按结构分类&#xff1a; 固…

C++编程-递归算法1

目录 先言 关于递归算法 例题一 题目描述 算法分析 标准程序 代码分析 例题二 题目描述 算法分析 标准程序 例题三 题目描述 算法分析 标准程序 代码分析 例题四 题目描述 标准程序 代码分析 后言 先言 从今天开始&#xff0c;我们将新的算法——递归&…

大二必做项目贪吃蛇超详解之中篇游戏设计与分析

贪吃蛇系列文章 上篇win32 中篇设计与分析 文章目录 贪吃蛇系列文章1. 地图1. 1 <locale.h>本地化1. 2 类项1. 3 setlocale函数1. 4 宽字符的打印1. 5 地图坐标 2. 蛇身和食物3. 数据结构设计4. 游戏流程设计5. 核心逻辑实现分析5. 1 游戏主逻辑5. 2 GameStart5. 2. 1 S…

145. 利用 Redis Bitmap实践: 用户签到统计

文章目录 一、Redis Bitmap简介二、Bitmap 的主要应用三、Go使用Redis实现签到统计用户签到查询用户签到状态统计今年累计签到天数统计当月的签到情况 总结 在现代应用程序中&#xff0c;用户签到是一个常见的功能。我们通常使用 MySQL 数据库来存储用户的签到记录。然而&#…

Go入门:gin框架极速搭建图书管理系统

Go入门:gin框架极速搭建图书管理系统 前言 本项目适合 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 项目源码请私信,欢迎前往博主博客torna.top免费查看。 项目结构 D:. ├─ go.mod ├─ go.sum │ ├─ cmd │ └─ main │ …

Docker 容器编排之 Docker Compose

目录 1 Docker Compose 概述 1.1 主要功能 1.2 工作原理 1.3 Docker Compose 中的管理层 2 Docker Compose 的常用命令参数 2.1 服务管理 2.1.1 docker-compose up &#xff1a; 2.1.2 docker-compose down &#xff1a; 2.1.3 docker-compose start &#xff1a; 2.1.4 docker…

OpenCV绘图函数(7)从一个椭圆定义中提取出多边形的顶点坐标函数ellipse2Poly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 近似一个椭圆弧为一个多边形线。 函数 ellipse2Poly 计算近似指定椭圆弧的多边形线的顶点。它被 ellipse 函数所使用。如果 arcStart 大于 arcEn…

景芯SoC A72实战反馈

先说结论&#xff1a; 内容非常全面&#xff0c;讲解到位&#xff0c;会有专门的工程师一对一答疑&#xff0c;整个项目跑下来提升非常大&#xff0c;绝对物超所值&#xff01; 一些细节&#xff1a; 本人微电子专业研一在读&#xff0c;有过两次简单的数字芯片流片经历&…

spring security 相关过滤器

Spring Security 提供了 30 多个过滤器。默认情况下Spring Boot 在对 SpringSecurity 进入自动化配置时&#xff0c;会创建一个名为 SpringSecurityFilerChain 的过滤器&#xff0c;并注入到Spring容器中&#xff0c;这个过滤器将负责所有的安全管理&#xff0c;包括用户认证、…

Windows系统中批量管理Windows服务器远程桌面工具——RDCMan

一、背景 在公司没有部署对应的堡垒机系统之前,做运维测试工作的人员,需要管理大量的服务器,每天需要对服务器进行必要的巡检、系统更新发布等内容,特别是有很多Windows服务器的时候,如果我们使用Windows自带的“远程桌面连接”只能一台台连接,比较繁琐。并且不能知道那台…