认识TomcatMavenServlet第一个Servlet程序

文章目录

    • 一、什么是Tomcat、什么是Servlet
    • 二、Tomcat的下载与使用
      • 关于下载
      • 启动欢迎页面查看
      • 可能出现的问题
      • 博客系统静态页面的部署
    • 三、什么是Maven
    • 四、第一个servlet程序
      • 1.创建Maven项目
      • 2.引入依赖
      • 3.创建目录结构
      • 4.编写程序
      • 5.打包程序
      • 6.部署程序
      • 7.验证
      • 小结
    • 五、servlet程序简化版

一、什么是Tomcat、什么是Servlet

Tomcat本质上就是一个HTTP服务器。

那么问题就来到了什么是HTTP服务器?与其他服务器类似,HTTP服务器干两件事,第一,将前端提交的数据转换成对象,第二,将服务器响应返回的对象进行解析。

HTTP协议就是HTTP客户端和HTTP服务器之间通信使用的协议。

浏览器本身就是一个HTTP客户端,与各种HTTP服务器进行交互。

HTTP服务器有很多种实现,其中Tomcat就是java圈子里最知名、使用最广泛的http服务器。

我们可以使用tomcat部署一些静态页面。【注意url写对,否则可能404】

也可以部署动态页面【当前学习重点】,而servlet就是一种实现动态页面的技术,是Tomcat给java提供的进行web开发的原生api,java程序员可以基于这些api更方便的开发带有业务逻辑的http服务器。【tomcat已经把这些http相关的底层操作封装好了,我们只需要调用tomcat提供的api即可】

这里涉及到几个概念:动态页面与静态页面、部署与热部署

静态页面就是页面内容始终是固定不变的。eg.百度主页

动态页面就是页面内容随着输入参数的不同而改变的。eg.搜索不同关键字,弹出不同的搜索结果。

从技术层面讲,静态页面就是单纯的html,动态页面则是html+数据。

部署就是把我们的代码,拷贝到webapps中,就好了(重启下tomcat)

热部署则是不用重启,直接拷贝进去就行


或许可以说我们之所以学tomcat就是为了之后把自己的博客系统部署到云服务器上,让别人也能访问。即最核心目标:基于Tomcat编程,做出网站,基于tomcat进行网站后端的开发。

又因为云服务器都是linux系统,所以我们之后还要简单学习如何使用linux系统。


所以接下来,我们先学习tomcat的下载与使用,再学习如何使用写一个servlet程序。

尽管目前企业中已经基本不适用servlet了,但是他是我们未来学习框架的基础。

二、Tomcat的下载与使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iz77HxJ0-1678780887712)(F:\typora插图\image-20230314151505982.png)]

关于下载

我们直接搜索官方下载,注意看它的域名是不是正确的就行。所以这里我们就不再做演示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bCKTbbpd-1678780887713)(F:\typora插图\image-20230313174641230.png)]

这里,我们说一下这个apache是什么东西。

它最开始也是一个开源的http服务器,后来影响力变大,形成了一个开源社区,开源社区又搞出了很多开源产品。Tomcat就是其中一个。

另外,这里需要注意:

tomcat的版本和后续servlet版本是强相关的,这里我们使用tomcat,对应的servlet就是3.1

tomcat是基于java实现的,要求我们的机器上必须有jdk!!如果没有jdk,tomcat跑不起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OOyOoYDK-1678780887713)(F:\typora插图\image-20230313182530690.png)]

启动欢迎页面查看

打开bin目录(可执行程序),根据系统选择对应的bat文件。

什么是bat文件?

bat文件是指批处理文件,是一种可执行性文件,由一些系列的命令构成,其中包含对其他程序的调用。

这里start.bat【给windows使用的】

与之对应的,start.sh【给linux和mac使用的】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlJg5EMq-1678780887714)(F:\typora插图\image-20230313183008445.png)]
看到这句话就是启动成功了。(服务器都是黑框的命令行)

这里我们访问tomcat自带的欢迎页面。在浏览器输入127.0.0.1:8080

80端口和8080端口没有本质区别,只是数字的区别,都经常用于web应用程序。

接下来我们就看看tomcat的欢迎页面。在浏览器框中输入环回ip和默认端口号。

注意,必须是tomcat是正在运行中,才能看到这个页面!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DVOwBYzR-1678780887715)(F:\typora插图\image-20230313184552352.png)]

第一级路径也起了个名字,叫做application path/context path

和双击打开html区别:一个通过网络访问,一个通过文件路径访问的,通过网络访问可以跨主机,通过路径只能访问自己电脑上的路径

为什么不能:nat的原因,ip不够用,不能跨网段使用,要想让别人访问,需要有外网ip。目前的都是内网ip。

成本最低方式买云服务器(本质上买外网ip)

可能出现的问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDEV1qTu-1678780887716)(F:\typora插图\image-20230308194904494.png)]

博客系统静态页面的部署

静态页面还没写完,之后再说,这里重点知道怎么把servlet程序部署到tomcat上边即第四部分。

三、什么是Maven

这里先对他有个简单了解即可。

Maven是一个工程管理工具。

  1. 可以规范目录结构
  2. 管理依赖(使用了第三方库,都给处理好)
  3. 构建
  4. 打包
  5. 测试

这里我们主要使用到了它的2、4两个功能。

maven是一个独立的程序,但是对于已经安装了idea的机器而言,不需要单独下载,idea自带,也不需要安装任何额外的插件。

这里我们对一个maven项目自动生成的目录结构进行解析,方便后边写servlet程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jpnN2IAn-1678780887717)(F:\typora插图\image-20230314141709206.png)]

四、第一个servlet程序

以写helloworld为例,需要七个步骤:

1.创建Maven项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZZeI2lD-1678780887717)(F:\typora插图\image-20230314140812042.png)]

如果我们首次使用Maven,项目创建好,会在下边读条,从重要仓库加载一些maven的依赖。这里需要联网,同时因为maven仓库再国外,网络不一定稳定,这里的读条可能时间比较长

2.引入依赖

其实也就是引入servlet对应的jar包。去maven官方搜索java servlet api.

正如我们前边所提到的,这里应该安装3.1.0版本,与tomcat8进行对应。

又因为我们创建的是maven项目,不需要将整个jar包导入,所以这里只需要把下边这段内容复制到pom.xml里边即可。

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

注意,这里的dependencies标签是我们自己写,它是project顶级标签下的子标签。倘若有多个依赖,依次往标签里粘贴即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4QQ16Jqx-1678780887718)(F:\typora插图\image-20230314142314409.png)]

通常也把这块的配置称为此项目需要的依赖在maven仓库的坐标。

另外,如果我们是首次使用,这里的字可能是红色的,不用慌,只是插件没下载完。

因为一般我们粘贴进来,idea的maven就会自动触发依赖的下载,下载完就好了,一般只需要一次。

如果粘贴进来半天没动,点下刷新或许会有意外之喜。(我就是这么弄好的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S6WZ9E4W-1678780887718)(F:\typora插图\image-20230314142626264.png)]

3.创建目录结构

虽然maven已经帮我们自动创建了一些目录,但是还不够。如果需要使用maven开发一个web程序,还需要别的目录

  1. 在main目录下,创建一个webapp目录(没有s哦)

  2. 在webapp下创建WEB-INF目录

  3. 再在WEB-INF目录下创建一个web.xml文件

  4. 给web.xml里边写点东西

    这些内容是固定的,不需要调整,目前也不需要理解具体啥含义

    <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" >
    <web-app>
    <display-name>Archetype Created Web Application</display-name>
    </web-app>
    

弄完之后大概是这个样子滴~

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXVfB0T9-1678780887719)(F:\typora插图\image-20230314143333123.png)]

下边我们来说几个点:

  1. 我们这个maven项目里边是没有main方法的,那么怎么运行的呢?假定整个项目是一个火车,那么tomcat就是一个车头,其他的车厢自己不会跑,但是都有特定功能,需要火车头拉着才能跑。但是tomcat需要进行识别啊,识别哪些文件是需要带的小弟就是通过这里目录的WEB-INF/web.xml。这个时候tomcat就把我们写的代码加载并运行起来了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lb3wmMRM-1678780887720)(F:\typora插图\image-20230314143957822.png)]

    处理一个get请求,不需要手动调用,而是tomcat自动调用(当服务器收到get请求后),所以不需要main方法

  2. 另外,如果我们完成上述步骤之后,发现代码是红色的,也不要就觉得一定是我们哪写错了。譬如这样

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNpCCekB-1678780887720)(F:\typora插图\image-20230314144214463.png)]

    因为idea只能比较准确的分析和判断java代码,对于其他代码,比如说html,css,js,xml,json,sql……如果标红,不一定是错的。

    判定代码是否正确的唯一标准就是看运行结果。

    另外,在idea里边,如果看到飘红,可以尝试alt+enter,也许会有意想不到的结果。

  3. pom.xml是maven项目总的配置文件,以xml形式组织的

4.编写程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjpedE9N-1678780887720)(F:\typora插图\image-20230314144651346.png)]

关于这个类的创建说下边几个点

  1. 父类里边的super.doGet要删掉

  2. req参数表示一个http请求,resp表示一个http响应,这里的resp就相当于一个输出型参数。

  3. doGet整体的效果就相当于是根据请求计算响应的一个过程

  4. 而最后一条语句中的writer对象,是一个字符流输出对象。

    这里的write操作其实是往resp的body部分进行写入,等resp对象整体构造好了,tomcat会统一转成http响应的格式,再写socket。【当然可能实现细节不同,也许是直接通过resp对象向网卡里写】

但是,到这里,这个类其实还没写完,我们一般会在类定义的上方加一个注解,这里是\xxx。一般是处理什么请求xxx就写什么。

所以完整的写法应该是这样的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBa4Qirs-1678780887721)(F:\typora插图\image-20230314145653269.png)]

关于注解:

注解是java中特殊的类,java专门定义的一种语法糖来实现注解。

它的作用:针对一个类/方法,进行额外的“解释说明”,赋予这个类/方法额外的功能/含义。

对于这里的webServlet注解,它具体的作用就是把当前的类与一个http请求的路径关联起来。一般情况下当tomcat收到get请求时就会调用。

但是具体要不要调用还需要看,这个项目里有没有特别的get请求和特别的处理逻辑即针对某一类get请求单独定义一个类,单独关联一个路径,一个资源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B2bXn9Zt-1678780887721)(F:\typora插图\image-20230314152308977.png)]

5.打包程序

这里的打包就是把程序编译好,得到一些字节码(.class文件),把这些文件打成压缩包的过程。

jar包就是一种.class构成的压缩包,但是我们这里要打的不是jar包,而是war包。

两者之间有什么区别呢?

jar包只是简单的java程序,而war包是tomcat专属的用来描述webap的程序。

可以说一个war就是一个webapp。

1.打开maven面板,双击package或者右键运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcrFFvgP-1678780887722)(F:\typora插图\image-20230314150512087.png)]

2.看到build success即是打包成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFpOeCA0-1678780887722)(F:\typora插图\image-20230314150619323.png)]

打包完毕之后,包会生成在target目录下

倘若已经显示build success,但是还没有target目录,尝试刷新一下,因为很可能是idea没有反应过来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke4aoR15-1678780887723)(F:\typora插图\image-20230314150739486.png)]

3.默认情况下,maven打的是jar包,但是我们需要的是war包,所以需要微调pom.xml【写入两个标签】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7n9JAQzh-1678780887723)(F:\typora插图\image-20230314151108738.png)]

调整完刷新一下即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ITSchWh-1678780887723)(F:\typora插图\image-20230314150904047.png)]

6.部署程序

把刚刚打包好的war拷贝到tomcat的webapps目录下即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XE7qnnug-1678780887724)(F:\typora插图\image-20230314151239803.png)]

然后启动tomcat,并确保启动成功。

7.验证

验证的方式就是打开浏览器,输入url,访问写好的代码。

我们需要注意以下几个点:

  1. url路径有两级,第一季也叫做context path/application path,这个目录就代表一个webapp,一个网站

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kXVYZXi-1678780887724)(F:\typora插图\image-20230314151945835.png)]

  2. 第二级路径也叫做servlet path,也就是我们在写好的HelloServlet类上边的注解内容

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSEj0auC-1678780887725)(F:\typora插图\image-20230314152011635.png)]

  3. 在验证之前一定确保tomcat是开着的!!记住不要点叉!!!

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sed6U8Ol-1678780887725)(F:\typora插图\image-20230314152105992.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WxV1DbSY-1678780887726)(F:\typora插图\image-20230314152215705.png)]

小结

输入url到出现页面出现hello world,中间发生了什么?

  1. 在浏览器地址栏输入url后,浏览器就构造了一个对应的http GET请求,发给了tomcat
  2. tomcat就根据第一级路径,确定了具体的webapp
  3. 根据第二级路径,确定了是调用了哪个类
  4. 再根据GET/POST方法确定调用HelloServlet的哪个方法(doGet、doPost、……),之后tomcat执行响应代码,完成对应工作

五、servlet程序简化版

我们可以使用一些操作简化上述过程:其中简化的手段就是将上边的手动打包+部署程序通过插件简化为一次按钮点击。

但在此之前我们需要对插件有一定的认识。插件就是允许用户在现有程序之上进行扩展,插件就是一个扩展功能的程序。

这里我们使用到的就是smart tomcat。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqOMjBnD-1678780887726)(F:\typora插图\image-20230314153520228.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wn1cX71F-1678780887726)(F:\typora插图\image-20230314153737236.png)]

非正常情况下,可能会有端口冲突,这里我没遇到,遇到再说。

完成上述操作之后,右键运行,看到下边的界面后,直接验证。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YVfWcDIX-1678780887727)(F:\typora插图\image-20230314155831769.png)]

//要想把HelloWorld返回客户端,要这样
//会得到一个Writer对象【字符流】,此处的writer对象从属于resp
//其实是向resp的body部分进行写入,等resp对象整个构造好了,tomcat会统一转成http响应的格式,再写socket【当然不排除直接写socket,实现可能不同】
//   流对象不一定是写入网卡/硬盘,例如这里就是写入内存缓冲区中(关键是看我们代码实现的细节)

出错了之后检查思路:

一闪而过

smart tomcat插件的配置

url的两级路径有没有输错

……

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

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

相关文章

学习 Python 之 Pygame 开发魂斗罗(四)

学习 Python 之 Pygame 开发魂斗罗&#xff08;四&#xff09;继续编写魂斗罗1. 创建子弹类2. 根据玩家方向和状态设置子弹发射的位置(1). 站立向右发射子弹(2). 站立向左发射子弹(3). 站立朝上发射子弹(4). 蹲下发射子弹(5). 向斜方发射子弹(6). 奔跑时发射子弹(7). 跳跃时发射…

图片的美白与美化

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

Python雪花代码

前言 用python画个雪花玩玩&#xff0c;源码在文末公众号哈。 雪花类 class Snow(): #雪花类 def __init__(self): self.r 6 #雪花的半径 self.x ra.randint(-1000,1000) #雪花的横坐标 self.y ra.randint(-500,5…

读书笔记——《富爸爸穷爸爸》

《富爸爸穷爸爸》&#xff0c;以前不屑读这种书。这种书就是那种走进书店放在门口展销位的成功学著作&#xff0c;一眼看上去没什么实在的内容&#xff0c;看上去很不靠谱&#xff0c;感觉就是骗一些社会底层又做着暴富梦的人来买的&#xff0c;但是由于自身原因或环境局限根本…

MySQL基本查询

文章目录表的增删查改Create&#xff08;创建&#xff09;单行数据 全列插入多行数据 指定列插入插入否则更新替换Retrieve&#xff08;读取&#xff09;SELECT列全列查询指定列查询查询字段为表达式查询结果指定别名结果去重WHERE 条件基本比较BETWEEN AND 条件连接OR 条件连…

【面试题】Python软件工程师能力评估试题(一)

文章目录前言应试者需知&#xff08;一&#xff09;Python 语言基础能力评估1、理解问题并完成代码&#xff1a;2、阅读理解代码&#xff0c;并在空白处补充完整代码&#xff1a;3、编写一个装饰器&#xff1a;exposer4、阅读代码并在空白处补充完整代码&#xff1a;5、自行用P…

嵌入式 串口通信

目录 1、通信的基本概念 1.1 串行通信 1.2 并行通信 2、串行通信的特点 2.1 单工 2.2 半双工 2.3 全双工 3、串口在STM32的引脚 4、STM32的串口的接线 4.1 STM32的串口1和电脑通信的接线方式 4.2 单片机和具备串口的设备连接图 5、串口通信协议 6、串口通信…

linux进程管理

进程管理 进程是启动的可执行程序的一个指令 1、进程简介 &#xff08;1&#xff09;进程的组成部分 已分配内存的地址空间安全属性&#xff0c;包括所有权凭据和特权程序代码的一个或多个执行线程进程状态 &#xff08;2&#xff09;程序和进程的区别 程序是一个静态的二进制…

第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

28岁小公司程序员,无车无房不敢结婚,要不要转行?

大家好&#xff0c;这里是程序员晚枫&#xff0c;又来分享程序员的职场故事了~ 今天分享的这位朋友叫小青&#xff0c;我认识他2年多了。以前从事的是土木行业&#xff0c;2年前找我咨询转行程序员的学习路线和职业规划后&#xff0c;通过自学加入了一家创业公司&#xff0c;成…

分享几个常用的运维 shell 脚本

今天咸鱼给大家分享几个不错的 Linux 运维脚本&#xff0c;这些脚本中大量使用了 Linux 的文本三剑客&#xff1a; awkgrepsed 建议大家这三个工具都要了解并最好能够较为熟练的使用 根据 PID 显示进程所有信息 根据用户输入的PID&#xff0c;过滤出该PID所有的信息 #! /b…

第十四届蓝桥杯三月真题刷题训练——第 11 天

目录 第 1 题&#xff1a;卡片 题目描述 运行限制 第 2 题&#xff1a;路径_dpgcd 运行限制 第 3 题&#xff1a;字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题&#xff1a;费用报销 第 1 题&#xff1a;卡片 题…

我今天要彻底搞懂线程状态的变化

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

MATLAB | 这些花里胡哨的热图怎么画

好早之前写过一个绘制相关系数矩阵的代码&#xff0c;但是会自动求相关系数&#xff0c;而且画出来的热图只能是方形&#xff0c;这里写一款允许nan值出现&#xff0c;任意形状的热图绘制代码&#xff0c;绘制效果如下&#xff1a; 如遇到bug请后台提出&#xff0c;并去gitee下…

出道即封神的ChatGPT,现在怎么样了?

从互联网的普及到智能手机&#xff0c;都让广袤的世界触手而及&#xff0c;如今身在浪潮中的我们&#xff0c;已深知其力。前阵子爆火的ChatGPT&#xff0c;不少人保持观望态度。现如今&#xff0c;国内关于ChatGPT的各大社群讨论&#xff0c;似乎沉寂了不少&#xff0c;现在怎…

Linux IPC:匿名管道 与 命名管道

目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种&#xff0c;本文介绍的是管道&#xff0c;管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源&#xff0c;例如水、石油之类的资源。而进程间通信的管道…

学习C++这几个网站足矣

文章目录cppreferencecplusplus[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[Awesome C](h…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块

前言作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv8的如何改进进行详细的介绍&…

1.10-1.12 Makefile

1. Makefile简介 举个栗子&#xff0c;如下为redis-5.0.10的项目目录&#xff0c;有很多的文件 有了Makefile文件&#xff0c;可以简单的make一下就可以对项目文件进行编译&#xff0c;最终生成可执行程序。 2. Makefile栗子1 首先&#xff0c;创建vim Makefile按照PPT里的格…

C++STL set/multiset容器 构造和赋值 大小和交换 插入和删除 查找和统计

文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器 1 set容器 基本概念 简介&#xff1a; 所有元素都会在插入时会被自动排序&#xff0c;例如&#xff0c;在set容器放入元素1、…