HTTP协议详解-下(Tomcat)

如何构造 HTTP 请求
对于 GET 请求

  1. 地址栏直接输入
  2. 点击收藏夹
  3. html 里的 link script img a…
  4. form 标签

通过 form 标签构造GET请求

<body>
        <!-- 表单标签, 允许用户和服务器之间交互数据 -->
        <!-- 提交的数据报以键值对的结果来组织 -->
        <form action="https://www.sogou.com" method="get">
            <input type="text" name="studentName">
            <!-- input type=submit 构造了一个特殊的 提交按钮, value 属性描述了按钮的文本 -->
            <!-- 点击这个按钮就会触发该 form 表单的"提交操作", 也就是构造 http 请求给服务器 -->
            <input type="submit" value="提交">      
        </form>

在这里插入图片描述

打开 Fiddler , 点击提交按钮, 我们进行抓包

在这里插入图片描述
对应关系:
在这里插入图片描述
返回结果:

在这里插入图片描述

可以看到, 我们构造的这个请求, 搜狗的服务器没有做啥特别的处理, 仍然是给我们返回最普通的搜狗主页了.

我们自己写服务器代码, 就可以根据需要, 来获取 url 中的 query string . 从而完成不同的功能


我们也可以构造出 POST 请求, 我们只要把 method 换成 POST, 就可以得到 POST 请求

<body>
        <!-- 表单标签, 允许用户和服务器之间交互数据 -->
        <!-- 提交的数据报以键值对的结果来组织 -->
        <form action="https://www.sogou.com" method="post">
            <input type="text" name="studentName">
            <!-- input type=submit 构造了一个特殊的 提交按钮, value 属性描述了按钮的文本 -->
            <!-- 点击这个按钮就会触发该 form 表单的"提交操作", 也就是构造 http 请求给服务器 -->
            <input type="submit" value="提交">
        </form>
</body>

在这里插入图片描述

在这里插入图片描述

对于form 构造的 post 请求来说, body 里的数据格式就和 quere string 是非常相似的, 也是键值对格式:
键值对之间用 & 分割
键和值之间用 = 分割

form 便签只能构造 GET 和 POST, 无法构造 PUT , DELETE OPTIONS 等方法的请求


另外一种构造HTTP 请求的方式(ajax) , 这个也是浏览器提供的一种通过 js 构造http 请求的方式

html 中. 通过 ajax 发起 http 请求, 这是 “异步” 的方式

这一行代码执行"发送请求" 操作之后, 不必等待服务器响应回来, 就可以立即先往下执行, 当服务器响应回来之后, 再有浏览器通知回我们的代码中.

那么代码中, 如何使用 ajax 呢?

  1. js 原生提供的 ajax 的 api, 不太好用
  2. jquery 提供的 ajax api 针对原生api 进行了封装, 简单了很多

jquery 中, $ 是一个特殊的全局变量, jquery 的 api 都是以 $ 的方法的形式来引出的.

<body>
    <!-- 引入 jquery -->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $.ajax({
            type:'get',
            url:'https://www.sogou.com?studentName=aaa',
            // 此处的 success 就声明了一个回调函数, 就会在服务器响应回到浏览器的时候触发该回调..
            // 正是此处的 回调体现了"异步"
            success:function(data){
                // data 就是响应的正文
                console.log("当服务器返回的响应到达浏览器后, 浏览器触发该回调, 通知到我们的代码中");
            }
        });
        console.log("浏览器继续往下执行后续代码");
    </script>
</body>

这段代码直接执行, 只能看到构造的请求, 无法获取到正确的响应, 因为发送请求给搜狗这个服务器. 它并没有处理我们的请求.
我们自己实现服务器代码就可以根据请求来实现响应了.

ajax 和 form 相比, ajax 的功能更强

  1. 支持 put delete 等方法
  2. ajax 发送的请求可以灵活的去设置 header
  3. ajax 发送的请求的 body 也是可以灵活设置

测试也是免不了构造 http 请求, 还有更方便的第三方工具(postman) 下载链接


HTTPS (HTTP + 安全层(SSL))

网络上如果明文传输数据, 是非常危险的, 就需要加密

HTTPS 主要是涉及到其中的 SSL 部分.

  1. 引入对称加密, 针对业务数据
  2. 让服务器生成一对非对称密钥, 公钥1和私钥1, 连同证书一起发给客户端, 自己持有私钥1,
  3. 客户端拿到证书进行检验, 拿着颁发证书的认证机构提供的公钥2, 对于证书中的签名进行解密, 计算校验和看是否匹配.
  4. 客户端拿着服务器 发来的公钥1, 针对对称密钥进行加密, 发给服务器.

在这里插入图片描述


Tomcat

HTTP 服务器
HTTP 协议就是 HTTP 客户端 和HTTP 服务器 之间通信使用的协议.
HTTP 客户端就是浏览器(也有别的)
HTTP 服务器, 则有很多种实现.
Tomcat 是 Java 圈子中, 最知名, 最广泛使用的 HTTP 服务器
Tomcat下载链接

tomcat 是基于Java 实现的, 这就要求你的机器上要有 JDK , 如果没有JDK 肯定是跑不起来的.

在这里插入图片描述

下载好解压缩就好了(解压缩的目录最好不要带 “中文” 或者 特殊符号)

在 bin 目录中, 双击 startup.bat 即可启动 Tomcat 服务器
在这里插入图片描述

这个startup.bat 是给Windows 使用的
而 startup.sh 是给 linux 和 mac 使用的.

看到类似这种就算启动成功了

在这里插入图片描述

注意:
在 Windows 上通过 cmd 方式启动 Tomcat 会出现乱码. 但是不影响 Tomcat 的使用.
乱码的原因是 Tomcat 默认按照 UTF-8 的编码方式处理中文. 而 windows 的 cmd 默认是 GBK 编码.
如果使用 Linux 或者 IDEA 中的终端来启动 Tomcat, 则没有乱码问题. 因此此处的乱码我们暂时不处理

访问 tomcat 的欢迎页面
在浏览器中输入 127.0.0.1:8080 即可看到 Tomcat 的默认欢迎页面
在这里插入图片描述

tomcat 默认的端口号, 类似于 MySQL 默认端口号是 3306
默认的端口号也是可以更改的(当前没必要)


如果运行 startup.bat . tomcat 启动不了(窗口一闪而逝)
这种情况可能有很多种, 最关键的是能看到出错信息
把.bat 这个程序拖到 cmd 中运行这样就能看到错误信息了.

其中一种典型的错误环境, 是没有配置环境变量, (JAVA_HOME, JER_HOME, CATALINA_HOME…)看报错, 缺哪个配置哪个即可


使用 Tomcat

我们使用 Tomcat 最大的用途就是把咱们写好的网站给部署上去

网站 = 前端 + 后端

所谓的部署就是把自己的代码, 拷贝到 webapps 目录中 (可能重启一下 tomcat )

  1. 拷贝代码
    在这里插入图片描述
    这样就可以在浏览器中输入地址访问了

在这里插入图片描述

这里的第一级路径(BLOG), 起了个名字叫做 application path / context path

那么这种访问方式跟直接拖拽到浏览器中访问有什么区别呢?
直接拖到浏览器中是通过文件路径来访问的(不能跨平台), 而部署在 tomcat 中 是通过网络访问的(可以跨平台).

那是不是这样就可以直接给别人访问呢?
也不是, 因为我们没有外网IP, 最简单的方式就是买个云服务器

那怎么通过 tomcat 进行网站后端的开发呢?
网站后端 http 服务器, 肯定需要针对 http 协议进行一系列操作, 幸运的是 tomcat 已经 把 http 相关的底层操作封装好了, 我们只需要调用 tomcat 给我们提供的 API 即可

下一篇详细讲…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能模型转ONNX 连接摄像头使用ONNX格式的模型进行推理

部署之后模型的运算基本上能快5倍。本地部署之后&#xff0c;联网都不需要&#xff0c;数据和隐私不像在网上那样容易泄露了。 模型部署的通用流程 各大厂商都有自己的推理工具。 训练的归训练&#xff0c;部署的归部署&#xff0c;人工智能也分训练端和部署端&#xff0c;每一…

做什么数据表格啊,要做就做数据可视化

是一堆数字更易懂&#xff0c;还是图表更易懂&#xff1f;很明显是图表&#xff0c;特别是数据可视化图表。数据可视化是一种将大量数据转化为视觉形式的过程&#xff0c;通过图形、图表、图像等方式呈现数据&#xff0c;以便更直观地理解和分析。 数据可视化更加生动、形象地…

十一、K8S之持久化存储

持久化存储 一、概念 在K8S中&#xff0c;数据持久化可以让容器在重新调度、重启或者迁移时保留其数据&#xff0c;并且确保数据的可靠性和持久性。 持久化存储通常用于程序的状态数据、数据库文件、日志文件等需要在容器生命周期之外的数据&#xff0c;它可以通过各种存储解…

DDD技术方案落地实践 | 京东云技术团队

1. 引言 从接触领域驱动设计的初学阶段&#xff0c;到实现一个旧系统改造到DDD模型&#xff0c;再到按DDD规范落地的3个的项目。对于领域驱动模型设计研发&#xff0c;从开始的各种疑惑到吸收各种先进的理念&#xff0c;目前在技术实施这一块已经基本比较成熟。在既往经验中总…

探讨m6调控因子与人类癌症之间的因果关系,纯生信也能轻松上5+

今天给同学们分享一篇生信文章“m6A Regulators Is Differently Expressed and Correlated With Immune Response of Esophageal Cancer”&#xff0c;这篇文章发表在Front Cell Dev Biol期刊上&#xff0c;影响因子为5.5。 结果解读&#xff1a; m6A调控因子在基因组中的异常与…

ruoyi-vue前端数据字典值引用与回显(列表中回显,多选框回显)

1. 列表中回显&#xff1a; 代码&#xff1a; <el-table v-if"refreshTable" v-loading"loading" :data"deptList" row-key"deptId" :default-expand-all"isExpandAll" :tree-props"{children: children, hasChil…

Hundred Finance 攻击事件分析

背景知识 Hundred Finance 是 fork Compound 的一个借贷项目&#xff0c;在2023/04/15遭受了黑客攻击。攻击者在发起攻击交易之前执行了两笔准备交易占据了池子&#xff0c;因为发起攻击的前提是池子处于 empty 的状态&#xff08;发行的 hToken 数量为 0&#xff09;。 准备交…

DAIR-V2X-V 3D检测数据集 转为Kitti格式 | 可视化

本文分享在DAIR-V2X-V数据集中&#xff0c;将标签转为Kitti格式&#xff0c;并可视化3D检测效果。 一、将标签转为Kitti格式 DAIR-V2X包括不同类型的数据集&#xff1a; DAIR-V2X-IDAIR-V2X-VDAIR-V2X-CV2X-Seq-SPDV2X-Seq-TFDDAIR-V2X-C-Example: google_drive_linkV2X-Seq-…

云架构师学习------腾讯云通识-存储与数据库

云架构师学习------腾讯云通识-存储与数据库 云架构师学习------腾讯云通识-存储与数据库存储基础存储服务对象存储-COS产品概述功能概览产品优势 云硬盘-CBS产品概述产品功能产品优势云硬盘类型 文件存储-CFS产品概述产品功能产品优势文件存储类型及性能规格存储类型性能与规格…

代码随想录算法训练营第四十六天丨 动态规划part09

198.打家劫舍 思路 如果刚接触这样的题目&#xff0c;会有点困惑&#xff0c;当前的状态我是偷还是不偷呢&#xff1f; 仔细一想&#xff0c;当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 所以这里就更感觉到&#xff0c;当前状态和前面状态会有一种依赖关系…

7+差异分析+WGCNA+PPI网络,学会了不吃亏

今天给同学们分享一篇生信文章“Integrated PPI- and WGCNA-Retrieval of Hub Gene Signatures Shared Between Barretts Esophagus and Esophageal Adenocarcinoma”&#xff0c;这篇文章发表在Front Pharmacol期刊上&#xff0c;影响因子为5.6。 结果解读&#xff1a; 选定研…

OpenAI 开发者大会亮相新一代AI

OpenAI 开发者大会于11月6日在旧金山举行&#xff0c;发布了一系列新模型及开发者产品的更新。 主要包括&#xff1a; GPT-4 Turbo&#xff1a;一种功能更强大的模型&#xff0c;具有128K的超大文本窗口&#xff0c;并以更低的成本提供服务。 Assistants API&#xff1a;新AP…

计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统

文章目录 导文文章重点摘要前言绪论课题背景:国内外现状与趋势:课题内容:相关技术与方法介绍系统分析系统设计系统实现总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统 文章重点 摘要 基于SpingBoot的金融投资顾问推荐…

如何使用ArcGIS Pro制作个性三维地形图

制作三维地图制作的多了&#xff0c;想着能不能换个“口味”&#xff0c;恰好看见制作六边形蜂窝图&#xff0c;灵光一闪&#xff0c;想着将二者结合&#xff0c;将平滑的三维地形图改成柱状图&#xff0c;从结果来看还可以&#xff0c;这里将制作方法分享给大家&#xff0c;希…

GoLong的学习之路(番外)如何使用依赖注入工具:wire

我为什么要直接写番外呢&#xff1f;其原因很简单。项目中会使用&#xff0c;其实在这里大家就可以写一些项目来了。 依赖注入的工具本质思想其实都大差不差。无非控制反转和依赖注入。 文章目录 控制反转为什么需要依赖注入工具 wire的概念提供者&#xff08;provider&#x…

[Leetcode] 0119. 杨辉三角 II

119. 杨辉三角 II 题目描述 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIn…

【OpenCV实现图像:图像处理技巧之空间滤波】

文章目录 概要导入库空间过滤器模板展示效果分析与总结 概要 空间滤波器是数字图像处理中的基本工具之一。它通过在图像的每个像素位置上应用一个特定的滤波模板&#xff0c;根据该位置周围的相邻像素值进行加权操作&#xff0c;从而修改该像素的值。这种加权操作能够突出或模…

igbt好坏判断方法有哪些?万用表怎么测试igbt的好坏?

什么是IGBT? IGBT即绝缘栅双极型晶体管&#xff0c;是一种复合全控型电压驱动式功率半导体器件&#xff0c;是电力控制和电力转换的核心器件&#xff0c;在高电压和高电流的光伏逆变器、储能装置和新能源汽车等领域被广泛应用。IGBT具有高输入阻抗&#xff0c;低导通压降&…

环形链表I和II

环形链表I 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果链表中存在环&#xff0c;则返回true。否则&#xff0c;返回false 。 解题思路 采用快慢指针的思想&#xff0c;创建fast和slow一快一慢指针&#xff0c;slow一次走一步&#xff0c;fas…

golang正则获取中括号中的内容

reg : regexp.MustCompile("【(.*?)】") //userInfo姓名:【AAA姓名】证件类型:【BBB身份证】证件号码:【122456789458】tempData reg.FindAllStringSubmatch(userInfo, -1)for k, v : range tempData {if k 0 {tempReleaseUser.Name v[1]//AAA姓名} else if k 1…