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

大连网站建设哪个好/域名注册需要多少钱?

大连网站建设哪个好,域名注册需要多少钱?,wordpress pdf缩略图不显示,wordpress插件 图片上传文章目录 1.什么是传输层2.传输层提供了什么服务3.传输层协议TCP 1.什么是传输层 传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看,“传输层”既是面向通信部分的最高层,与下面的三层一起共同构建进行网…

文章目录

  • 1.什么是传输层
  • 2.传输层提供了什么服务
  • 3.传输层协议TCP

1.什么是传输层

传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看,“传输层”既是面向通信部分的最高层,与下面的三层一起共同构建进行网络通信所需的线路和数据传输通道,同时又是面向用户的最低层,因为无论何种网络应用,最终都需要把各种数据报传送到对方。应用层的用户数据通过传输层协议在不同网络中的主机间进行传输,因为仅靠网络层把数据传送到目的主机上还是不够的,还必须把它交给目的主机的应用进程。
在这里插入图片描述
当网络层把源主机上发出的数据包传送给目的主机后,还需要将数据交到对应的应用程序进程. 位于两台网络主机间的真正数据通信主体不是这两台主机,而是两台主机中的各种网络应用进程。因为在同一时刻,两主机间可以进行多个应用通信. 而这里的应用进程识别就要依靠“传输层”了,它通过“端口”将不同应用进程进行对应的。
在这里插入图片描述

2.传输层提供了什么服务

传输层的主要作用就是为它的上层提供端到端的数据传输服务, 即保证应用层的数据能够从源主机安全的到达目的主机上对应的应用进程.

1.什么是端到端的服务?

端到端通信是传输层为主机之间上的应用进程提供的通信服务. 传输层的数据段通过网络层将数据段交付到对端主机的目的进程,不管目的主机有多远,中间有多少机器,只要在两头间的应用进程间建立连接,就说已经是端到端连接了(两个进程间的连接),即端到端是逻辑链路,这条路可能经过了很复杂的物理路线,但两端程序不管,就好像它们是直接相连的一样,只认为是两端的直连.
在这里插入图片描述
你比如你要将数据从A传送到E,中间可能经过A→B→C→D→E,对于传输层来说他并不知道b,c,d的存在,他只认为我的报文数据是从a直接到e的,这就叫做端到端。

2.如何实现端到端的服务?

传输层实现端到端的服务有两种方式,一种是面向连接的,一种是面向无连接的.

面向连接:在提供传输服务前需要先建立专门的传输连接(类似一条专门用于两个进程之间进行通信的虚拟信道),而且这条连接是可管理的,在需要或通信结束时进行拆除。面向连接的传输服务是可靠的传输服务,而且可提供拥塞控制和差错控制功能,如TCP提供的传输服务。

无连接:在提供服务前不需要建立专门的传输连接,直接向目的节点发送数据,不管是否有可传输的通道,只提供不可靠(仅做尽力传输)的传输服务,如UDP提供的传输服务。

上述服务与网络层提供的面向连接和无连接服务很像,但网络层是通信子网的一个组成部分,网络服务质量并不可靠,如频繁地丢失分组,网络层系统可能崩溃或不断地进行网络复位。对于这些情况,用户将束手无策,因为用户不能对通信子网加以控制。而传输层能对通信子网进行管理和控制(什么进行管理和控制,网络层信息该丢还是丢,只不过丢了之后能够知道并重新对数据进行发送或其它操作管理)。

3.传输层服务

传输层要完成端到端的透明数据传输,至少要分为两个步骤:一是应用进程之间虚拟传输连接的建立(此处仍仅针对面向连接的传输层协议),二是源端用户数据沿着传输连接传送到目的端。

在整个数据传输过程中,传输层服务需要完成以下8个方面的基本功能:传输层寻址、传输连接建立、数据传输、传输连接释放、流量控制、拥塞控制、多路复用和解复用、崩溃恢复.

4.连接与释放连接服务

|4.1传输层寻址

虽然网络层把数据分组从源主机传送到了目的主机,但是这并不代表数据的传输过程就全部完成了,因为数据分组还没有真正地交付给相应的应用进程,此时应用进程才是数据通信主体。而我们又知道,同一时间的通信双方可能存在许多并发应用进程,那么源端来的数据分组该交给哪个应用进程呢?这就涉及传输层的寻址问题了。

传输层(二)传输层寻址方案

|4.2连接建立

传输层有两个重要术语TSAP与TPDU,它们贯穿整个传输层数据连接以及传输服务的始末.

TSAP(Transport Layer Service Access Point):传输层服务访问点是上层(应用层)调用下层(传输层)的一个逻辑接口,其实就是我们所说的端口,端口用来标识应用层的进程.

TPDU(Transport Layer Data Unit):传输层与对等层之间传输的报文,也就是"数据段",其实每一层都有每一层的SAP和PDU.

传输层TCP数据段格式:
在这里插入图片描述

源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。
目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
序列号:对数据包进行标记,以便在到达目的地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l,每发送一次数据,就累加一次该数据字节数的大小。在建立连接时由计算机生成一个随机数作为序列号的初始值,用来解决网络包乱序问题。客户端的序列号为上一个服务器端的确认号.
确认序号:收到对方报文后都要发送一个确认报文(包含确认号)表示确认收到该报文,并表明期望收到的下一个报文段的序号值。 TCP 的可靠性,是建立在「每一个数据报文都需要被确认收到」的基础之上的,用来解决不丢包的问题。客户端的确认号,是上一个服务器端的序列号+负载数据.
数据偏移:TCP 报文段的头部长度 ,它指出了 TCP报文段的数据起始处距离TCP报文的起始处有多远。
由于 4 位二进制数能表示的最大十进制数字是 15,这也侧面限制了 TCP 首部的最大长度
保留: 保留为今后使用,但目前应置为 0
标志位: 6位标志位,每一位的值只有 0 和 1

  • ACK:当 ACK = 1 的时候,确认号(Acknowledgemt Number)有效,称携带 ACK 标志的 TCP 报文段为确认报文段,为0表示数据段不包含确认信息,确认号被忽略。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 设置为 1
  • SYN:当 SYN = 1 的时候,表明这是一个请求连接报文段。 一般称携带 SYN 标志的 TCP 报文段为同步报文段。 在 TCP 三次握手中的第一个报文就是同步报文段,在连接建立时用来同步序号。对方若同意建立连接,则应在响应的报文段中使 SYN = 1 和 ACK = 1。
  • FIN:当 FIN = 1 时,表示此报文段的发送方的数据已经发送完毕,并要求释放 TCP 连接。一般称携带 FIN 的报文段为结束报文段。在 TCP 四次挥手释放连接的时候,就会用到该标志。
  • RST:当 RST = 1时,表示 TCP 连接中出现严重错误,需要释放并重新建立连接。 一般称携带 RST 标志的 TCP 报文段为复位报文段。
  • PSH:当PSH=1时,表明该数据段高优先级,接收方TCP应尽快将数据推给接收程序,不要等到整个TCP序列缓存都填满了后再交付。
  • URG:当URG=1时,表明此数据段应尽快传送,而不要按本来的队列次序来传送。与紧急指针字段共同使用,紧急指针指出在本数据段中紧急数据所在的最后一个字节的位置,使接管方知道紧急数据有多长。

窗口大小:该字段明确指出了现在允许对方发送的数据量,它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。 窗口大小的值是指,从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。假如确认号是 701 ,窗口字段是 1000。这就表明,从 701 号算起,发送此报文段的一方还有接收 1000 (字节序号是 701 ~ 1700) 个字节的数据的接收缓存空间。
校验和:由发送端填充,接收端对 TCP 报文段执行 CRC 算法,以检验 TCP 报文段(头部+有效载荷)在传输过程中是否损坏,如果损坏这丢弃。
紧急指针:仅在 URG = 1 时才有意义,指出本数据段中的紧急数据字节数,同时指出了紧急数据的末尾在数据段中的位置,发送方 TCP 把紧急数据插入到本数据段有效载荷的最前面,而在紧急数据后面的数据仍是普通数据。
选项和填充:可扩展部分。

传输层建立/拒绝连接需要用到三种类型的TPDU一一CR,CC,RJ
CR:连接请求数据段
CC:连接确认数据段
RJ:拒绝数据段
传输层建立/拒绝连接的大致流程:
在这里插入图片描述
TCP建立连接/断开连接的流程:
在这里插入图片描述
TCP规定,建立连接时发送的同步数据段(即SYN = 1的报文段)不能携带数据,但要消耗掉一个序号.

  • Ⅰ:建立连接时,主机A发送同步报文,并将同步位SYN置为1,确认位ACK置为0(代表当前报文的确认序号无效),随机产生一个序列号seq=k,然后将该数据包发送给主机B,主机A进入SYN_SENT状态,等待主机B确认。
  • Ⅱ:主机B收到报文后由同步位SYN=1知道主机A请求建立连接,主机B将同步位SYN和确认位ACK都置为1,确认序号ack=J+1,随机产生一个序号seq=y,并将该报文发送给主机A以确认收到该连接请求,主机B进入SYN_RCVD状态。
  • Ⅲ:主机A收到确认报文后,检查ACK是否为1,再检查确认序号ack是否为k+1,如果正确则将确认位ACK置为1,ack=y+1(表示我收到你序号位y的报文了),并将该报文发送给主机B,主机B检查ACK是否为1,再检查ack是否为y+1,如果正确则成功建立连接,主机A和主机B进入ESTABLISHED状态,完成三次握手,随后主机A与主机B之间可以开始传输数据了。

断开连接:

  • Ⅰ:断开连接时,主机A发送一个终止报文,并将终止位FIN置为1,确认位ACK置为0,随机产生一个序列号seq=u,然后将该报文发送给主机B,用来关闭主机A到主机B的数据传送,主机A进入FIN_WAIT_1状态。
  • Ⅱ:主机B收到终止报文后,发送一个确认报文给主机A,并将确认位ACK置为1,确认序号ack=u+1,随机生成一个序号seq=v,主机B进入CLOSE_WAIT状态。
  • Ⅲ:主机B发送一个终止报文,并将终止位FIN置为1,确认位ACK置为1,随机序号seq=w,确认号=u+1,用来关闭主机B到主机A的数据传送,主机B进入LAST_ACK状态。
  • Ⅳ:主机A收到终止报文FIN后,主机A进入TIME_WAIT状态,接着发送一个确认报文ACK给主机B,确认序号为ack=w+1,序号seq=u+1,主机B进入CLOSED状态,完成四次挥手。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为主机B在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给主机A。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

5.数据传输服务

传输层在数据传输时提供了流量控制、拥塞控制、多路复用和解复用、崩溃恢复等服务.
传输层TCP的流量控制和拥塞控制(图文详解)
如何理解传输层的多路复用与多路分解

3.传输层协议TCP


补充:
通信子网(communication subnet,或简称子网): 是指网络中实现网络传输功能的设备及其软硬件的集合,传输设备、网络传输协议、传输控制软件等属于通信子网,是网络的内层,负责信息的传输. 简而言之就是由各种网络传输设备(中继器、集线器、网桥、路由器、网关等硬件设备)和传输线路组成,主要负责数据的传输. 通信子网对应OSI体系架构中的下三层(物理/数据链路/网络层).

资源子网:资源子网由计算机系统、终端、终端控制器、连网外设、各种软件资源与信息资源组成, 主要负责数据的处理和数据存储,资源子网对应OSI体系结构的上三层(应用/表示/会话层).
点到点传输:两个设备直接相连(中间不经过任何其它设备)的通信叫点到点通信。它只提供一台机器到另一台机器之间的通信,不会涉及到程序或进程的概念。
点到点通信是针对数据链路层或网络层来说的,因为数据链路层只负责直接相连的两个节点之间的通信,一个节点的数据链路层接受ip层数据并封装之后,就把数据帧从链路上发送到与其相邻的下一个节点。 点对点是基于MAC地址和或者IP地址,是指一个设备发数据给与该这边直接连接的其他设备,这台设备又在合适的时候将数据传递给与它相连的下一个设备,通过一台一台直接相连的设备把数据传递到接收端。由物理层、数据链路层和网络层组成的通信子网为网络环境中的主机提供点到点的服务.
序列号:TCP协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序列号的包。在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。另外,TCP通过数据分段中的序列号来保证所有传输的数据可以按照正常的顺序进行重组,从而保障数据传输的完整。
TCP序列号是两个方向的,每个方向有自己的序列号,这个序列号是随机产生的.
客户端的序列号为上一个服务器端的确认号,客户端的确认号,是上一个服务器端的序列号+负载数据.

参考:
端到端通信
TCP协议详解
TCP/IP协议详解
《深入理解计算机网络》之传输层总结

相关文章:

计算机网络_04_传输层

文章目录 1.什么是传输层2.传输层提供了什么服务3.传输层协议TCP 1.什么是传输层 传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看,“传输层”既是面向通信部分的最高层,与下面的三层一起共同构建进行网…...

3 ALS算法的优化

3.1引入时间遗忘曲线 3.2引入物品特征 3.3时间特征和物品特征加权融合 ALS优化算法的执行步骤 将式(12)对原始评分矩阵进行优化,再代入 式(3)得到了优化后的ALS算法。该算法步骤如下: 第一步:读取数据集,初始化用户-物品评分...

lvsDR模式

LVS-DR模式 是最常用的LVS负载方式 直接路由模式 Lvs调度器 只负责请求和转发 转发到真实服务器 但是响应结果 由后端服务器直接转发给客户端 不需要经过调度器处理 可以减轻Lvs调度器的负担 提高系统性能和稳定性 工作原理: 客户端发送请求到vipLVS调度器接受请求…...

Linux系统下配置王爽汇编语言环境

【步骤一】 先打开命令行,进入root模式,输入如下语句: sudo apt-get install dosbox 该语句的作用主要是安装dosbox 【步骤二】 安装完成之后,命令行输入dosbox 会进入dosbox页面: 【步骤三】 在你的主机中&…...

scss下解决父组件中使用::v-deep修改样式穿透到子组件的问题

开发中经常会用到深度选择器来修改第三方组件库等子组件的样式,这时候就用到样式穿透(style Penetration) 样式穿透的方式有:>>>、 /deep/、::v-deep这三种 使用中发现了一个问题,就是当在父组件使用了v-deep修改自身组件或者第三方…...

Redis的瓶颈在哪里?

Redis是一个开源的非常快速且高效的内存键值存储数据库,常用作缓存、消息队列、会话存储等。 Redis之所以被认为是一个快速的数据库,主要是由于以下几个方面的设计和实现: 基于内存存储: Redis是一个基于内存存储的数据库&#x…...

如何在spark中使用scikit-learn和tensorflow等第三方python包

目录 1 打包需要的python包2 修改spark配置文件 1 打包需要的python包 首先我们用conda包管理工具对我们需要的python包进行虚拟环境创建: conda create -n python37 --copy -y -q python3.7 --prefix /your/workspace/path scikit-learn tensorflow下面是对每个参…...

JS中call()、apply()、bind()改变this指向的原理

大家如果想了解改变this指向的方法,大家可以阅读本人的这篇改变this指向的六种方法 大家有没有想过这三种方法是如何改变this指向的?我们可以自己写吗? 答案是:可以自己写的 让我为大家介绍一下吧! 1.call()方法的原理…...

BUUCTF 镜子里面的世界 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张.png图片。 密文: 解题思路: 1、材料只有一张图片,题目提示“镜子里面的世界”结合图片中的英文“look very closely”(翻译为“仔…...

【MySQL--->内置函数】

文章目录 [TOC](文章目录) 一、日期函数二、字符串函数三、数学函数四、其他函数 一、日期函数 current_date();当前日期 current_time();当前时间 current_timestamp();当前时间戳 now();当前时间 date(‘date’);日期 date_sub(date,interval number second/minute/hour/d…...

FFmpeg 从视频流中抽取图片

抽取单个图片 使用 FFmpeg 进行截图:在终端或命令提示符下,使用以下命令进行截图: ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg其中, -i input.mp4:指定输入的 H.264 文件路径和名称。 -ss 00:00:05&a…...

Oracle RU 19.21及 datapatch -sanity_checks

参考文档: Oracle Database Patch 35643107 - Database Release Update 19.21.0.0.231017 Datapatch User Guide (Doc ID 2680521.1) datapatch fails with ORA-04061/ORA-4065/ORA-04045/ORA-04067 due to Golden Gate triggers. (Doc ID 2301658.1) 在19.21的…...

云原生周刊:ingress2gateway 发布 | 2023.10.30

开源项目推荐 m9sweeper m9sweeper 是一个免费且简单的 Kubernetes 安全平台。它将行业标准的开源实用程序集成到一站式 Kubernetes 安全工具中,该工具可以帮助大多数 Kubernetes 管理员保护 Kubernetes 集群以及集群上运行的应用程序。 Kairos Kairos 是在 Kub…...

YOLOv8如何关闭AMP混合精度训练?

如果你是使用命令行运行的话,只需要在训练参数中添加–unamp即可.如果你是直接代码运行的话,找到这个参数parser.add_argument(‘–unamp’, action‘store_true’, help‘Unuse Automatic Mixed Precision (AMP) training’),修改为parser.add_argument(‘–unamp’, action‘…...

k8s、kubeadm安装

master(2C/4G,cpu核心数要求大于2) 192.168.86.11 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.86.22 docker、kubeadm、kubelet、kubectl、flannel node02(2C/2G) 1…...

kinect v2获取人体骨骼数据

#include <iostream> #include <string> #include <WS2tcpip.h> #pragma comment (lib, "ws2_32.lib") #include <chrono> #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> // 核心功能&#xff0c;包括矩阵…...

JDK、JRE及JVM的关系及作用

1、JDK JDK&#xff08;Java Development Kit&#xff09;是java程序的开发工具集&#xff0c;包含了运行环境JRE、开发工具及基础类库等。 注意&#xff1a; 生产环境&#xff0c;目前使用JDK同时作为开发和运行环境的比较多&#xff0c;主要是为了排查问题方便的同时不用切…...

组学数据上传(六)|GEO数据库数据上传实操

最近有些老师反馈文章发表时要求提供GEO登录号,如:GSEXXXX&#xff0c;问要怎么获取这种登录号?这时就需要把数据上传至GEO数据库了。还在等什么&#xff0c;跟着小编了解下GEO数据库&#xff0c;手把手教您上传数据至GEO数据库。 GEO数据库全称GENE EXPRESSION OMNIBUS&…...

洛谷,Hydro,Vijos,博客园,GitHub 分别是什么?

洛谷&#xff08;luogu.com.cn&#xff09;是一个在线的算法竞赛平台&#xff0c;提供了大量的算法题目&#xff0c;可以进行刷题、比赛、交流等。Hydro 是一个开源的在线评测系统&#xff0c;用于处理洛谷和其他OJ平台的算法评测。Vijos&#xff08;vijos.org&#xff09;是另…...

自学VUE笔记

一、基础语法学习 1、Attribute 绑定 a、绑定单个属性&#xff1a;给这个div 增加id 属性 ​ <div v-bind:id"dynamicId"></div>简写&#xff1a; <div :id"dynamicId"></div> b、绑定多个属性值 data() {return {objectOf…...

系列四十二、Spring的事务传播行为案例演示(二)#REQUIRED

一、演示Spring的默认传播行为&#xff08;REQUIRED&#xff09; 1.1、运行之前表中的数据 1.2、StockServiceImpl /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description:*/ Service(value "stockServiceREQUIRED") public class StockServiceImpl…...

oracle rac-归档满处理

有客户反馈数据库无法使用了&#xff0c;客户手动启动报错如下 SQL> startup; ORACLE instance started. Total System Global Area 2.6924E10 bytes Fixed Size 2265984 bytes Variable Size 1.3959E10 bytes Database Buffers 1.2952E10 bytes R…...

Python Django 之全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置&#xff1a;settings.py2.1 注册 APP&#xff1a;INSTALLED_APPS2.2 模板路径&#xff1a;TEMPLATES2.3 静态文件&#xff1a;STATICFILES_DIRS2.4 数据库&#xff1a;DATABASES2.5 允许访问的主机&#xff1a;ALLOWED_HOSTS 1 …...

挑选MES系统供应商,需要考虑哪些重要因素?

挑选MES系统供应商时&#xff0c;需要考虑下述几个重要因素&#xff1a; 1.功能与特性&#xff1a;MES系统的功能和特性尤为重要。切实保障挑选的服务商可以满足企业的实际需求&#xff0c;包含生产计划管理、物料追踪、质量管理、机器设备等多个方面的功能。 2.系统可扩展性&a…...

Ai创作系统ChatGPT网站源码+图文搭建教程+支持GPT4.0+支持ai绘画(Midjourney)

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…...

基于计算机视觉的坑洼道路检测和识别-MathorCup A(深度学习版本)

1 2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 A&#xff1a;基于计算机视觉的坑洼道路检测和识别 使用深度学习模型&#xff0c;pytorch版本进行图像训练和预测&#xff0c;使用ResNet50模型 2 文件夹预处理 因为给定的是所有图片都在一个文件夹里面&#xf…...

【考研数学】概率论与数理统计 —— 第七章 | 参数估计(1,基本概念及点估计法)

文章目录 引言一、参数估计的概念二、参数的点估计2.1 矩估计法2.2 最大似然估计法 写在最后 引言 我们之前学了那么多分布&#xff0c;如正态分布 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)&#xff0c;泊松分布 P ( λ ) P(\lambda) P(λ) 等等&#xff0c;都是在已知 …...

获取文本长度

使用TextView的getLineCount方法&#xff0c;它可以返回TextView当前显示的行数。但是&#xff0c;这个方法只有在TextView绘制完成后才能返回正确的值&#xff0c;否则可能返回0。因此&#xff0c;需要在TextView的post方法中调用&#xff0c;或者在onWindowFocusChanged方法中…...

python html(文件/url/html字符串)转pdf

安装库 pip install pdfkit第二步 下载程序wkhtmltopdf https://wkhtmltopdf.org/downloads.html 下载7z压缩包 解压即可, 无需安装 解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方) import pdfkit# 将 wkhtmltopdf.exe程序 路径 p…...

Spring概述

Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台&#xff0c;它最初是由 Rod Johnson 编写的&#xff0c;并且于 2003 …...