JavaEE初阶学习:HTTP协议和Tomcat

news2024/11/28 22:42:30

1. HTTP协议

HTTP协议是一个非常广泛的应用层协议~~

应用层协议 —> TCP IP 协议栈

应用层 —> 关注数据怎么使用~

传输层 —> 关注的是整个传输的起点和终点

网络层 —> 地址管理 + 路由选择

数据链路层 —> 相邻节点之间的数据转发

物理层 —> 基础设置,硬件~~ 高速公路

应用层协议,经常是需要进行"自定义协议的".

但是,很多时候也不一定非得从零开始设定,也可以基于一些大佬设计好的协议,在这个基础上进行定制~

HTTP 之所以应用非常广,主要原因是应为 HTTP 可定制型非常强~~

什么时候会用到HTTP协议呢?

  1. 浏览器打开网页
  2. 手机app从网络上加载数据~~
  3. wx小程序,支付宝小程序

HTTP协议的工作过程

HTTP 是一个"一问一答"这种形式的协议~

一个请求 —> 一个响应~~

在这里插入图片描述

我们看到的网页 html 这个东西
一般都是由人家的服务器,通过 HTTP 响应返回到浏览器上,才能显示的~
(CSS,JS同理是一样的)

浏览器,也就可以认为是一个 HTTP 客户端~

HTTP请求发送出去,就需要从应用层到物理层,层层分装
接收方收到后,再从物理层到应用层层层分用,最终才能完成传输~~

2.HTTP 协议格式

学习HTTP协议,最主要的就是认识 HTTP 的报文协议格式~~
要想认识报文格式,需要借助一些外部工具,来把HTTP协议给显示出来~
抓包工具

抓包工具,本质上相当于一个"代理",借助这样的代理,就可以看到网络上传输的具体数据~~

1.抓包工具

抓包工具有很多

  • Chrome内置了抓包工具
  • wireshark
  • fiddler

小编用fiddler来进行抓包~

安装 fiddler 会遇到的问题
1.要勾选https,安装根目录(在打开这个页面时会弹出对话框点yes)
在这里插入图片描述
2.fiddler 作为一个代理,可能会和你电脑上其他代理冲突.


打开一个Edge浏览器,我们看到抓取的数据
在这里插入图片描述

2.抓包的原理

在这里插入图片描述
代理就可以简单理解为一个跑腿小弟. 你想买零食, 又不想自己下楼去超市, 那么就可以把钱给你的跑腿小弟, 跑腿小弟来到超市把钱给超市老板, 再把零食拿回来交到你手上. 这个过程中, 这个跑腿小弟对于 “你” 和 “超市老板” 之间的交易细节, 是非常清楚的.

3.fiddler的使用

左侧,是抓到报的列表
在这里插入图片描述

列表中的内容是在持续滚动的~~

怎么看自己抓到的包?

  1. 先看颜色,黑色的包,响应是普通数据
    蓝色的包,响应的是html.咱们关注的搜狗主页,响应应该是html.
  2. 在看域名 www.sogou.com
  3. 再看响应数据的长度,一般是找长度比较长的~

在这里插入图片描述

双击要关注的包,右侧就会显示详情~
右上是请求
右下时响应

我们一般找Raw,显示的就是请求的具体数据~

在这里插入图片描述
文本数据

这个就是完整的http请求!!!

所谓的http请求,其实就是通过代码,构造出一个符合http格式要求的字符串,往TCP的socket中写就行了~~

一个http请求数据包含了四个部分:

  1. 首行
    在这里插入图片描述

  2. header
    在这里插入图片描述

  3. 空行(是header的结束标记)

在这里插入图片描述
4.正文(body)空行后面的内容,有的时候可以没有~~

接下来我们看看响应~
在这里插入图片描述
同理我们点击Row

在这里插入图片描述
如果我们看到的是这种情况,说明响应是压缩过的.
本身http是文本,压缩成了二进制~

由于带宽比较贵,压缩能够减少网络传输的数据量,节省带宽~
把数据压缩,本质上是用 CPU 资源,换带宽资源~

在这里插入图片描述
点击这个就可以解压缩
在这里插入图片描述

一个http响应包含了四个部分:

  1. 首行
    在这里插入图片描述
  2. 响应报头(header)
    在这里插入图片描述
  3. 空行
    在这里插入图片描述
  4. 正文(此处的正文就是HTML代码)
    在这里插入图片描述
    不仅仅是html,包括CSS,JS,图片,字体…浏览器上能显示出来的这些内容都是服务器返回的响应,携带的数据交给浏览器

HTTP响应就是这个要显示的html本体

浏览器拿到这个HTTP响应也就拿到了里面的html就可以显示了~

4.协议格式总结

在这里插入图片描述

3.HTTP 请求

1. 首行

在这里插入图片描述

  • GET代表HTTP方法
    描述HTTP请求想要干啥,http协议有很多不同的方法,不同的方法,表示不同的语义
    在这里插入图片描述
    一般看到的请求大部分都是GET
    POST 一般是登录,上传文件的时候可以看到~
    POST 请求body一般不为空
    GET 请求body一般为空

如果谈到,GET和POST这俩方法,没有本质区别~

但是在使用习惯上
1.GET 习惯上用来表示"获取一个数据",POST用来表示提交一个数据
2.GET一般没有body,需要携带数据则放到URL中,POST一般有body
3.GET请求通常会设计成幂等的~POST则无要求 幂等性在服务器开发中是很关键的,设计成幂等之后,请求就可缓存了~~
4.GET是可缓存的(前提是幂等),POST则不能
5.GET请求可以被浏览器收藏,POST不能~

  • 中间地址代表URL
    URL 唯一资源定位符 描述了网络上唯一的一个资源~~

这个概念严格来说,并非是HTTP里的概念,很多协议都会用到URL

MySQL,jdbc里都用过

针对URL来说,结构大概是这几部分
在这里插入图片描述
http和https是啥关系?
https是在http 的基础上,加密了一层~

https://cn.bing.com/search?q=rfc+http&qs=n&form=QBRE&sp=-1&lq=0&pq=rfc+http&sc=10-8&sk=&cvid=9EA7393FC55A48858600E6A0F077AABE&ghsh=0&ghacc=0&ghpl=

  • cn.bing.com 域名,服务器的地址~

域名/地址后面还有个端口号,端口号可以省略~对于http来说,默认的端口号是80,对于https来说,默认的端口号是443

  • search 带层次结构的路径,标识你要访问这个服务器的资源是啥~

  • q=rfc+http&qs=n&form=QBRE query string参数~~ 使用&分割键值对,使用=分割键和值 ~ 对请求的资源进行细节上的补充 ~

  • HTTP/1.1代表版本号

2. 请求头(header)

在这里插入图片描述

键值对结构,每个键值对占一行,键和值之间使用冒号空格来分割

这里的键值对可以有N行
会用空行作为结束的标记~

header中的键值对,大部分都是HTTP协议规定的,当然这了也是可以添加自定义键值对~

9b6a5acd38370.png)

这个属性描述了浏览器请求要访问的服务器,是谁~
这里写的不仅仅是地址,也可以写端口号~

在这里插入图片描述

在URL中,已经谢了当前要访问的服务器是谁,为啥在这还要再写一遍?

大多数情况下,Host中的值,和URL中的域名是一致的~

比如,当前我们访问的服务器,不是直接访问,而是通过"代理"的方式来访问的

此时Host和URL就不一致了~

Content - Type 描述了body的数据格式~

Content - Length 描述了body的长度(字节)~

这俩属性,跟着body走

如果是一个没有body的GET请求,自然header中没有这俩属性~

在这里插入图片描述

在这里插入图片描述

长度不是往2 ^ N 对齐

在这里插入图片描述

application/json 数据格式
json描述了咱们的数据按照json的格式来组织~
harset = UTF-8 数据的字符集

在这里插入图片描述

{
"username":"xxxxxxxxx",
"password":"xxxxxxxxxxxx",
"uuid":"xxxxxxxx",
"status":0
}

这个json格式,用{}表示的
里面包含了若干键值对.
键值对之间使用 , 来分割
键和值之间使用 : 来分割

JS的对象的样子,就和json非常相似!

在进行前后端交互的时候(浏览器和HTTP服务器),JSON是最常用的一种数据格式~

Content - Type还会有其他的写法.

  • application/x-www-form-urlencoded

form 表单提交数据,会生成这种格式的body.
此时body的格式,其实就是和 query string 是一样的.
username = wjh&password = 123&uuid=xxxxx&status=0

作为请求,Content - Type 就只有上述两种写法.
作为响应,Content - Type 还有几种写法

  • text/html
  • text/css
  • application/Javascript
  • application/json
  • image/jpg
  • image/png

浏览器中,直接按F5,是刷新.
按Ctrl + F5是强制刷新(会把缓存的数据也重新加载)

一个网页,往往还会依赖很多的其他资源,比如css,js,图片,字体等~

每次访问一个网页,都需要把依赖的这些资源也加载到浏览器这边.(加载这些资源,都需要一定的网络资源)

由于上述这些css,js图片等资源,一般都是固定的~很少变化
就可以把这些资源加载一遍后,保存在浏览器所在机器的本地硬盘上

此时后续在访问服务器,访问网页,就只加载html即可,其他的这些资源就不必在加载了~

此时就可以认为,本地主机的硬盘,就是远端服务器的一个"缓存"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有了上述格式的描述,浏览器/HTTP服务器,才能够认识到当前的body,并正确进行解析.

User-Agent (简称 UA)

用户使用的客户端是什么样

在这里插入图片描述

Windows NT 10.0; Win64; x64 操作系统的版本:64位win10系统

Chrome/117.0.0.0 Safari/537.36 都是浏览器的版本

UA主要就是描述了,浏览器是什么版本,系统是是啥版本~

UA现在的一个重要用途,就是区分用户是 手机/PC/平板~~

虽然UA能做到这一点,但是实际上,现在还有更好的方案,来解决上述问题
CSS里提供了"媒体查询"功能,可以根据浏览器窗口大小,来设置不同样式~
这种页面开发方式,称为"响应式布局"

Referer

描述了当前页面从哪个页面跳转来的~~

如果直接在地址栏输入url,此时请求中没有refer(如果是点收藏夹,效果是一样的)
在这里插入图片描述

如果在搜狗主页输入,然后搜索,在搜索结构也就可以看到refer,就是sogou主页~~

在这里插入图片描述

Cookie

在这里插入图片描述

Cookie的值,也是键值对
键值对之间使用;分割
键和值之间使用=分割

当前在HTTP中遇到的键值对:
1.url中的query string
2.header部分,每一行是一个键值对
3.body部分,如果Content - Type 为 x-www-form-urlencoded 或者json,body的内容也是键值对
4.Cookie里面,存储的数还是键值对
以上键值对,都是允许用户自定义的~~

Cookie是一种简单的数据文件,存储在用户计算机中,被Web服务器用于识别用户。在Web浏览器向Web服务器发送请求时,Web服务器会将一个Cookie发送到浏览器,然后浏览器将该Cookie保存在计算机上。以后,每当同一浏览器向Web服务器发送请求时,它都会发送相同的Cookie。Cookie可以包含任何由Web服务器发送的信息,例如用户ID、会话ID、浏览器类型、页面首选项等。Cookie的本质就是一种用于跟踪用户活动并存储用户相关信息的技术。

在这里插入图片描述
由于网页有很多,我访问搜狗,是需要存储一些数据,访问百度,也需要存一些数据~~

针对这种情况,做法是分开,每个网站都存自己的Cookie(Cookie是按域名为维度进行存储的)

同一个网站(搜狗主页,和搜索结果页,搜狗图片…)共享同一份Cookie

不同的网站(搜狗和百度)则是有各自的Cookie

Cookie从哪里来?

从服务器来的,当我们的浏览器访问服务器的时候,服务器就会在HTTP响应中,通过Set-Cookie字段,把Cookie的键值对,返回给浏览器~~
浏览器收到这个数据,就会在本地存储~

在这里插入图片描述

这些都是浏览器给服务器返回的Cookie数据~~

Cookie到哪里去?

会在下次请求的时候,把Cookie带给服务器~~
Cookie在浏览器这边,只能算是"暂存"
真正要让这个数据发挥作用,还得是由服务器来使用的~

Cookie有啥用?

浏览器在本地存储数据的机制~

Cookie是由网站服务器发送给用户浏览器的小数据文件,用于存储在用户浏览器中的一些数据。它们可以帮助网站在用户访问时“记住”他们的偏好、状态和其他信息,以提供更好的用户体验。

例如,Cookie可以用于:

  1. 跟踪用户登录信息:当用户访问需要登录的网站时,Cookie可以记住用户的登录信息,允许用户在同一浏览器中访问多个页面而无需反复进行身份验证。

  2. 个性化用户体验:通过使用Cookie,网站可以记住用户的兴趣、购买历史,以及其他信息,从而提供更加个性化的服务和建议,或在用户再次访问网站时显示相关内容。

  3. 记录用户行为:Cookie可以跟踪用户浏览的网站或页面,并将这些信息发送给网站。这些信息可以帮助网站优化其内容和布局,或者改善其营销策略。

总之,Cookie可以帮助网站提供更好的用户体验,从而提高用户满意度和忠诚度。

3.请求正文(body)

  1. application/x-www-form-urlencoded
  2. multipart/form-data
  3. application/json

大抵就是上述三种,具体内容大家可以通过抓包自行查看~~

4.HTTP响应

1.状态码

首行有三部分:

  1. 版本号(和请求相同)
  2. 状态码 —> 数字,数字来表示这次请求执行成功还是失败,失败的原因
  3. 状态码描述 —> 通过一个或者一组单词,描述这个状态码的含义.

HTTP提供的状态码是非常繁多的~
在这里插入图片描述

上述状态码繁多,但我们常用的的就那么几个~~

200 OK

表示的是请求成功!!

在这里插入图片描述

404 Not Found

表示要访问的资源不存在

在这里插入图片描述

在这里插入图片描述

403 Forbidden

访问被拒绝(没有权限)

500 Internal Server Error

服务器内部错误

你在互联网上不容易见到,但是在你自己写代码的过程中,贼常见~~

你的服务器 bug 了,抛了异常没有 catch 到,就会500

504 Gateway Timeout

服务器访问超时

浏览器给服务器发请求,服务器要返回响应
结果服务器迟迟没有响应~~

302 Move temporarily

重定向,就是访问旧的地址,被自动引导到新的地址上~~

就相当于手机号码中的 “呼叫转移” 功能.
比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,
只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678 上.

临时重定向(下次要不要继续重定向?不确定)

301 Moved Permanently

永久重定向(以后都重定向了)

状态码虽然很多,但可以分成具体几大类

在这里插入图片描述

HTTP协议的标准文档中,还有一个特殊的状态码,418(菜单)

2.通过 form 表单构造 HTTP 请求

如何构造HTTP请求?

  1. 直接通过浏览器地址栏,输入一个url => 构造出一个GET请求~~
  2. html中一些特殊标签,也会触发GET请求(link,script,img,a 标签)
  3. form表单,可以触发GET和POST请求~~

form 发送 GET 请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>form 表单的使用</title>
</head>
<body>
    <!--action里表示要访问的URL-->
    <form action="https://www.sougou.com/abc/def" method="get">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">

    </form>
</body>
</html>

在这里插入图片描述

我们在输入框输入111,222提交后,抓包发现
在这里插入图片描述

在这里插入图片描述

  • form 的 action 属性对应 HTTP 请求的 URL
  • form 的 method 属性对应 HTTP 请求的方法
  • input 的 name 属性对应 query string 的 key
  • input 的 内容 对应 query string 的 value

3.通过 ajax 构造 HTTP 请求

ajax 全称 Asynchronous Javascript And XML,是现在最主流的前后端交互方式之一.

Asynchronous => 异步 同步 => synchronized

同步

  1. 同步和互斥(加锁的场景)
  2. 同步和异步(IO的场景)
    同步,请求的发起者,自行获取这里的响应
    异步,请求的发起者不关心结果,而是由被请求的这一方面计算出结果之后,把结果推送给发起者~~

Ajax是前端和后端,异步交互的一种方式
JS 给提供了原生的ajax 的api,这个api贼难用~~
我们准备使用jquery里面提供的ajax api.

$ 在 jquery 中是一个特殊的全局变量~
jquery中的各种 api 都是 $ 的方法

在这里插入图片描述

function (body) {
	//写处理响应的代码
}

这是一个回调函数,会在服务器返回一个正确的响应的时候,被浏览器自动执行~~
这个执行过程就是"异步"的

在我们页面的JS中,把请求发出去了就不管了,就继续执行后续的代码了
直到说,响应回来之后,浏览器就会把这个响应喂给我们的代码~~(浏览器调用上述的这个success回调函数,执行处理响应的逻辑)

在这里插入图片描述

相比之下,ajax的功能比form更丰富,更灵活~

ajax虽然有很多的优势,但是有一个非常严重的问题!!!

在这里插入图片描述
这个是属于ajax的一个非常典型的问题 => 跨域问题
现在运行ajax代码页面的域名abc.com 但是ajax里的请求访问的域名是def.com
这俩域名不一致的话,哪怕服务器给了你响应的数据,浏览器还是不能处理,还是要报错~
这个东西是浏览器为了限制安全问题引入的保护机制~~

上述的请求都是要写代码的,有什么办法是不写代码也能构造请求~~
有一些现成的工具可以直接构造出HTTP请求~

postman
1.注册账号并登录
2.切入到workspace,并且创建一个新的workspace
3.点击+,创建一个标签页

5.HTTPS

HTTPS 基于HTTP ,只是比HTTP多了一个"加密层"

为啥要有HTTPS?解决啥问题?

运营商劫持!

下载一个 天天动听

未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.

在这里插入图片描述

已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接

在这里插入图片描述

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.

点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了.

在这里插入图片描述

只要是网络上的数据,明文传输的.都是存在被劫持的风险的!!

为了能够改善上述问题,就引入了加密~~ HTTPS就应运而生了

1.加密

加密就是把明文(要传输的信息)进行一系列变换, 生成密文 .

解密就是把密文再进行一系列变换, 还原成明文 .

在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为密钥

2.HTTPS的加密过程

既然要保证数据安全, 就需要进行 “加密”.

网络传输中不再直接传输明文了, 而是加密之后的 “密文”.

加密的方式有很多, 但是整体可以分成两大类: 对称加密非对称加密

对称加密:只有一个密钥 key

明文 + key => 密文
密文 + key => 明文
加密和解密只有一个密钥.

对称加密的特点就是计算起来比较快速!!

非对称加密:需要两个密钥,一个叫做公钥(pub),一个叫做私钥(pri)

明文 + pub => 密文 (明文 + pri => 密文)
密文 + pri => 私钥 (密文 + pub => 私钥)

HTTPS 基本工作过程

加密,针对HTTP的各种header和body

1.使用对称密钥

在这里插入图片描述

在这里插入图片描述

但事情没这么简单. 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端和每个密钥之间的关联关系, 这也是个很麻烦的事情~

在这里插入图片描述

既然是不同的客户端,不同的密钥,此处就要求让客户端连接到服务器的时候自己先生成一个密钥~~,让每个客户端各自生成各自的,互不相关,也就生成了不同的密钥了.

既然客户端需要自己生成一个密钥,如何把这个密钥告诉服务器呢??
网络传输~~

在这里插入图片描述

看起来是需要针对key进行加密一下,难道要生成一个key2,使用 key2 加密key嘛?
key2也得告诉服务器,谁来加密key2??

走到这里,此路不同,就得考虑其他了~

2.此时就引入非对称加密~~
在这里插入图片描述

上述过程中,黑客没拿到对称密钥key,此时后续的传输就都是安全的~

客户端和服务器的业务数据传输,任然是使用对称加密的方式(对称加密速度快,成本低)
为了保证对称密钥能够安全到达服务器,引入了非对称加密,保护对称密钥~~
非对称加密在对称密钥传输完成后,就可以不用了~

安全是相对的,黑客也有对应的方法来攻击客户端~(中间人攻击!!)

在这里插入图片描述

中间人攻击,问题的关键,在于让客户端能够信任公钥!!

3.引入证书

所谓证书,是一串数据~~(类似于一个对象一样,里面有很多属性)

有一个权威的机构,负责颁发证书~~

我现在有一个服务器,我就需要去这个机构里面,申请证书!!!
申请的时候,当然要提交一些资料(甚至要交钱),机构进行审核,
审核通过了,就会颁发证书~~

提交证书的时候,就可以把服务器的公钥一起提交过去,
此时证书中就包含了服务器的公钥!!

这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名

在这里插入图片描述

啥是签名?就是校验和~~使用证书中的其他各个属性,综合在一起运算出一个数字
两个数据,如果相同,得到的校验和一定相同~

客户端拿到加密的签名后,就会拿着权威机构的公钥,进行解密!!
然后得到了校验和(sum1)
客户端再按照同样的算法,再结合证书的各个属性,计算一遍校验和,得到(sum2)

如果sum1和sum2相同,说明这里的各个属性是都没有被修改过的
如果不同,则说明这里的属性已经被篡改了~

3.总结

HTTPS 工作过程中涉及到的密钥有三组.

  1. 通过对称密钥,来保证业务数据的安全.
  2. 使用非对称加密,来安全传输对称密钥
  3. 中间人攻击,黑客可以拿到对称密钥,引入证书,使客户端能够验证公钥是否合法~

上述介绍的 对称加密 + 非对称加密 + 证书 这一套流程,不仅仅是HTTPS会涉及到~

对称加密 + 非对称加密 + 证书 => SSL/TLS(也是一个协议)

HTTPS = HTTP+ SSL

6.Tomcat

HTTP服务器

下载8.5系列的zip安装包解压缩即可使用~~

在这里插入图片描述

其中的logs文件夹,就是Tomcat的运行日志~

其中的webapps放webapp(网站(后端+前端)),一个Tomcat上可以部署多个网站~~

启动Tomcat~

进入bin目录.
Windows双击startup.bat
Linux/mac,运行startup.sh

在这里插入图片描述
代表启动成功了!!

Tomcat是一个HTTP服务器!!
但凡是一个服务器,基本都是个黑框框!!

接下里看看Tomcat的端口号是否正确绑定~

tomcat既然是服务器,务必要绑定一个端口,Tomcat默认的端口号是8080.

在这里插入图片描述
最后面的数字,是Tomcat进程id

通过浏览器,访问一下Tomcat的欢迎页面~

在这里插入图片描述

此时这个页面,就是通过网络访问Tomcat上的内容~

学习Tomcat为了部署咱们自己的网站~
咱们之前的博客系统(前端)

所谓的部署一个网站到Tomcat上,就是把对应的内容拷贝到Tomcat的webapps目录中即可!

Tomcat上部署和直接双击运行,有啥区别呢??

直接双击运行,只能在你自己的电脑上运行,别人无法访问~

Tomcat上部署,是可以通过网络访问的,跨主机的~~

现在其他人的电脑能不能访问到我的Tomcat??

如果要想访问,要么是我有外网IP,要么是其他人的电脑和我的电脑在一个局域网中!

虽然我们电脑上没有外网IP,但我们有云服务器,云服务器是有外网IP的!!
云服务器上的Tomcat就可以部署想要的网站,就能够被别人访问了!

Tomcat的基本使用是比较容易的.

  1. 启动
  2. 把内容拷贝到webapps上
  3. 通过浏览器访问
  4. 使用netstat查看端口

我们要学习的重点是基于Tomcat进行编程!

我们现在要写网络后端~~(HTTP服务器)
虽然可以重头写一个HTTP服务器,但是,比较麻烦
Tomcat已经完成了这部分工作,并且Tomcat给咱们提供了一系列的API,可以让我们在程序中直接调用

我们给Tomcat提供和的这一组API起了个名字叫做Servlet

此时就可以省去一部分工作,更专注于业务逻辑了~~

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

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

相关文章

Rocky(centos)安装nginx并设置开机自启

一、安装nginx 1、安装依赖 yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel 2、去官网下载最新的稳定版nginx nginx: downloadhttp://nginx.org/en/download.html 3、将下载后的nginx上传至/usr/local下 或者执行 #2023-10-8更新 cd /usr/…

我在 NPM 发布了新包: con-colors

链接地址&#xff1a;npmjs.com con-colors 安装依赖 yarn add con-colors使用 导入&#xff1a; import { print } from "con-colors";使用&#xff1a; print.succ("成功的消息"); print.err("失败的消息")例子&#xff1a; import { p…

与诈蟹的初次邂逅,你中招了没

中秋国庆双节大家都过得怎么样&#xff1f;有没有吃到螃蟹&#xff1f;不管你们吃没吃到&#xff0c;反正东东是吃到螃蟹...的瓜了&#xff0c;四舍五入一下也算是吃到了吧。 这不节后上班第一天&#xff0c;同事们就已经开始互相问候关于是否收到蟹卡的情况&#xff0c;一开始…

vmware一键启动虚拟机系统脚本

bat脚本 "D:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\Program Files (x86)\Ginkgo7000\C7-10.10.10.111\CentOS 7-NAS-6.vmx" 脚本内容说明 "D:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"…

一般香港服务器带宽选多大够用?(带宽计算方法)

​  在海外IDC市场份额中&#xff0c;香港服务器依托自身优越的服务器资源条件&#xff0c;在各个行业中发挥的重要作用。但是&#xff0c;不同业务对网络带宽的要求各不相同&#xff0c;弄清楚如何计算带宽需求对于确保业务平稳运行至关重要&#xff0c;最好从一开始就使用正…

研发质量管理体系

研发质量管理体系的脉络是怎样的&#xff1f;如何建立适合组织发展的研发质量管理体系&#xff1f;质量管理的核心是什么&#xff1f;一些思考&#xff0c;一些线索&#xff0c;欢迎朋友们一起探讨、碰撞。

Tensorflow入门之 Hello World

Tensorflow入门之 Hello World 简介 Tensorflow 是 Google 开源的深度学习框架&#xff0c;来自于 Google Brain 研究项目&#xff0c;在 Google 第一代分布式机器学习框架 DistBelief 的基础上发展起来。 Tensorflow 的官方网址 http://www.tensorflow.org Tensorflow 的 G…

基于Spring Boot和WebSocket的在线聊天室测试

1.测试目标 设计可靠且全面的自动化测试用例&#xff0c;以覆盖项目的核心功能以及不同的使用场景。通过有效的测试策略和测试工具选择&#xff0c;提高测试效率&#xff0c;减少手动测试所需的工作量&#xff0c;从而加速项目的交付周期。保障持续集成与持续交付流程的顺利进…

保护数据安全:防病毒防木马的重要性与策略

随着科技的进步&#xff0c;我们的生活已经离不开互联网。网络为我们的工作、学习、娱乐带来了极大的便利&#xff0c;但同时也带来了新的挑战——数据安全问题。病毒、木马等恶意软件&#xff0c;是威胁数据安全的主要因素。因此&#xff0c;我们必须采取有效的防病毒防木马措…

react中预览excel表格

查了很多资料&#xff0c;很多插件&#xff0c;有很多也用不了&#xff0c;最后试了xlsx这个插件&#xff0c;可以使用。 话不多少了&#xff0c;直接放代码吧&#xff1a; 1.代码实现 fetch(API).then((res: any) > {res?.blob().then((r: any) > {const reader ne…

论文降重:我从论文重复率75%降到4.5%,顺利毕业

去年我在撰写毕业论文的过程中遇到了一个巨大的挑战&#xff0c;那就是论文的重复率过高&#xff0c;高达75%。这个问题严重威胁着我的学位和未来职业发展&#xff0c;因此我决定付出一切努力来解决这个难题。在花费大量时间和努力后&#xff0c;并借助智元兔AI写作助手(http:/…

【高效办公_PDF】如何快速批量整合多个PDF???---Python方法

高效办公 PDF 如何快速批量整合多个PDF??? 今日方法:如何使用Python代码实现合并当前目录PDF文件 市场上当然有许许多多的形形色色的软件可以进行PDF整合等操作; 那么我们用代码(r如:python怎么实现高效办公呢? ) # [注] 在合并过程中,程序是按照所在文件夹的存放顺…

Javascript 笔记:函数调用与函数上下文

在 JavaScript 中&#xff0c;函数上下文通常指的是函数在执行时的当前对象的引用&#xff0c;这通常用 this 关键字表示。this 关键字在不同的执行上下文中可能引用到不同的对象。 1 全局上下文 当 this 关键字用在全局上下文&#xff08;不在任何函数内部&#xff09;&#…

【微客云】外卖霸王餐项目来啦 免费提供霸王餐系统

它终于出来啦&#xff01;微客云分站终于正式发布&#xff01;&#xff01; 先前的文章就已经预告过微客云要搞分站&#xff0c;很多小伙伴们一直在问老许分站什么时候出来&#xff0c;想加盟分站怎么做&#xff1f;有什么条件&#xff1f;本来是不打算这么快正式官宣分站的&am…

[网鼎杯 2020 白虎组]PicDown python反弹shell proc/self目录的信息

[网鼎杯 2020 白虎组]PicDown - 知乎 这里确实完全不会 第一次遇到一个只有文件读取思路的题目 这里也确实说明还是要学学一些其他的东西了 首先打开环境 只存在一个框框 我们通过 目录扫描 抓包 注入 发现没有用 我们测试能不能任意文件读取 ?url../../../../etc/passwd …

css图形化理解--扭曲函数skew()

transform: skewX(30deg);transform: skewY(45deg);transform: skew(30deg,45deg);transform: skewX(angleX);transform: skewY(angleY);transform: skew(angleX,angleY); 是CSS中的一个2D变换方法&#xff0c;它用于对元素沿X轴、Y轴进行倾斜变换。其中&#xff0c;angle表示倾…

【物联网】Arduino+ESP8266物联网开发(二):控制发光二极管 按钮开关控制开关灯

【物联网】ArduinoESP8266物联网开发(一)&#xff1a;开发环境搭建 安装Arduino和驱动 2.ESP8266基础应用 学习过程中会用到的基础引脚如下。开发板提供3V电源&#xff0c;一般传感器工作电压都是3V&#xff0c;可通过开发板供电。如果设备需要的电压超过3V&#xff0c;如水泵…

electron之进程间通信

Electron进程间通信 使用electron编写程序时经常遇到下面这种场景&#xff1a; 当用户点击一个按钮时&#xff0c;需要将页面输入的信息保存到本地电脑上&#xff1b; 或者是点击菜单时&#xff0c;需要页面窗口做出响应。 用户点击的按钮和窗口展示的内容是运行在渲染进程中&…

【Java 进阶篇】HTML链接标签详解

HTML链接标签是构建网页中超链接的重要元素之一&#xff0c;允许您在不同的网页之间或同一网页内创建链接。本篇博客将详细介绍HTML链接标签&#xff0c;包括超链接的类型、属性、用法和示例代码&#xff0c;旨在帮助基础小白更好地理解和使用链接标签。 1. 超链接的基本概念 …

python 读取文件函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&#xff0c;直接在文末名片自取就可 读取文件内容…