HTTP协议详解-下(Tomcat)

news2024/12/23 22:48:41

如何构造 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 即可

下一篇详细讲…

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA开源项目 于道前端项目 启动步骤参考

1. 安装 启动过程有9个步骤&#xff1a; 1.1 安装 Node JS , V18版本的 &#xff08;安装步骤省略&#xff09; 1.2 安装 npm install -g yarn &#xff0c;node JS里边好像自带npm &#xff0c;通过npm的命令安装 yarn 1.3 切换到项目中去安装&#xff0c;npm install &a…

5G网络切片,到底是什么?

网络切片&#xff0c;是5G引入的一个全新概念。 一看到切片&#xff0c;首先想到的&#xff0c;必然是把一个完整的东西切成薄片。于是&#xff0c;切面包或者切西瓜这样的画面&#xff0c;映入脑海。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 然而…

如何做游戏软件开发?怎么和软件开发公司合作?

随着科技的发展和普及&#xff0c;游戏软件已经成为人们日常生活和工作中不可或缺的一部分&#xff0c;许多企业也开始涉足游戏软件开发领域&#xff0c;希望能够打造出一款受欢迎的游戏&#xff0c;那么&#xff0c;如何做游戏软件开发?怎么和软件开发公司合作呢?下面我们来…

【Data Grip】打开控制台编写sql语句

这里我从表打开&#xff08;也可以从其他地方打开都行&#xff0c;右键new,出现Query Console 点击即可)控制台&#xff0c;右键表 new 点击query console 在上面编写sql语句 编写完之后 点击绿色三角形运行

某平台简单尝试一次密码逆向

1、查看表单数据 发现密码加密 2、控制台搜索password 发现他在欺负我看不懂拼音 3、第一次断点调试失败 断点后随便填写账号密码登录&#xff0c;发现失败 4、控制台搜索 jiami 又找到了一个函数 5、断点成功 重新登录后断点成功 jiami function(password) {var e passw…

代码随想录训练营Day1:二分查找与移除元素

本专栏内容为&#xff1a;代码随想录训练营学习专栏&#xff0c;用于记录训练营的学习经验分享与总结。 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;二分查找与移除元素 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a…

Django之三板斧的使用,全局配置文件介绍,request对象方法,pycharm链接数据库,Django链接数据库,ORM的增删改查

【1】三板斧(3个方法)的使用 Httpresponse() 括号内写什么字符串&#xff0c;返回的就是什么字符串返回的是字符串 render(request&#xff0c; 静态文件 ) request是固定的静态文件是写在templates文件夹里面的&#xff0c;如&#xff0c;HTML文件 redirect( 重定向的地址 ) 重…

EfficientNet 系列网络学习

EfficientNet V1 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 增加网络参数的方式有三种&#xff1a;深度、宽度和输入图像的分辨率。探究这三种方式对网络性能的影响&#xff0c;以及如何同时缩放这三种因素是 EifficentNet的主要贡献。 单独…

内核移植笔记 Cortex-M移植

常用寄存器 PRIMASK寄存器 为1位宽的中断屏蔽寄存器。在置位时&#xff0c;它会阻止不可屏蔽中断&#xff08;NMI&#xff09;和HardFault异常之外的所有异常&#xff08;包括中断&#xff09;。 实际上&#xff0c;它是将当前异常优先级提升为0&#xff0c;这也是可编程异常/…

【代码随想录】算法训练营 第二十天 第六章 二叉树 Part 6

654. 最大二叉树 题目 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回…

西部数码的域名如何实现DDNS功能

功能简介&#xff1a; 动态域名解析&#xff08;Dynamic DNS&#xff0c;简称DDNS&#xff09;可以让用户使用固定的域名来访问动态IP地址&#xff0c;解决因IP地址变化造成服务无法访问的情况。 本文将介绍如何使用西部数码的API实现DDNS功能&#xff0c;使您的域名始终指向您…

SpringCloudGateway--Sentinel限流、熔断降级

目录 一、概览 二、安装Sentinel 三、微服务整合sentinel 四、限流 1、流控模式 ①直接 ②关联 ③链路 2、流控效果 ①快速失败 ②Warm Up ③排队等待 五、熔断降级 1、慢调用比例 2、异常比例 3、异常数 一、概览 SpringCloudGateway是一个基于SpringBoot2.x的…

第一次pta认证P测试C++

第一题 试题编号&#xff1a;20210701-1 试题名称&#xff1a;标题统计 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 128.0MB 【问题描述】 小明阅读了一篇特别优美的英文文章&#xff0c;读到最后总结段落的时候&#xff0c;突发奇 想&#xff0c;想要数一数这个段落中…

python+pytorch人脸表情识别

概述 基于深度学习的人脸表情识别&#xff0c;数据集采用公开数据集fer2013&#xff0c;可直接运行&#xff0c;效果良好&#xff0c;可根据需求修改训练代码&#xff0c;自己训练模型。 详细 一、概述 本项目以PyTorch为框架&#xff0c;搭建卷积神经网络模型&#xff0c;训…

数据采集中的基本参数

分辨率(resolution) 分度数量越多则分辨率越高&#xff0c;测量精度也越高 区间(range) 模数转换所能处理模拟信号电平的极限 应尽量使输入与此区间匹配&#xff0c;物尽其用 信号极限幅度集合 所测信号的最大值和最小值 应与输入信号的最大值和最小值相接近 LSB 最低有效…

python编程复习系列——week1(Input Output)

Input & Output 前言0、我们的第一个Python程序一、变量和数据类型1.变量是用来存储值的保留存储位置2.变量以特定的数据类型存储值。常见数据类型&#xff1a;3.字符串添加&#xff08;连接&#xff09;4.字符串乘法&#xff08;带数字&#xff09;&#xff01;5.从用户处…

4K壁纸下载器,多种风格壁纸,一键批量下载到本地,桌面壁纸,高清壁纸,壁纸下载

一个桌面壁纸爬虫工具&#xff0c;该工具可以从内置的多个壁纸网站爬取高清壁纸&#xff0c;并支持将壁纸一键下载到本地&#xff0c;真正实现了所见即所得&#xff0c;不必再费心费力的翻看多个网站。 文末附工具下载链接~ 一、软件简介 本次带来的工具由吾爱的一位大佬开发…

DVWA - 2

文章目录 SQL Injectionlowmediumhigh SQL Injection low 输入 1&#xff0c;可以展示 id 1 的人员信息&#xff1a;输入 1’&#xff0c;有报错信息。可以看出是mysql数据库&#xff0c;‘‘1’’’ 去除两边的引号&#xff0c;再去除1两端的引号&#xff0c;可以看出闭合符…

【遮天】叶凡首次高燃时刻,暴打姜峰逼其下跪,故事逐渐燃情

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《遮天》国漫30集剧情最新内容解析&#xff0c;前面剧情中&#xff0c;叶凡被姜峰如疯狗一般追杀&#xff0c;他像一只被狼群追逐的鹿&#xff0c;在山林中亡命逃窜。身后是姜峰那歇斯底…