前言
一个SpringBoot项目集成的有很多东西,这些东西需要去梳理,这篇文章就是对一个SpringBoot项目中集成的Tomcat、Maven、Mybatis的解读与联系
在javaweb方面的学习中,对于Tomcat,springboot,maven,mybatis这几个关键的后端开发的东西的理解与掌握不太透彻,搞不清楚他们之间的联系,对于开发框架一头雾水的,可以看一下这一篇我对于这部分知识的梳理与理解
这篇文章主要讲述对于Tomcat、Maven、Mybatis的介绍以及与SpringBoot的连用,关键作用的解读
注:这篇文章不讲述具体实现,只介绍和梳理,用通俗的语言,让读者有个更深的理解
目录
Maven
Maven是一款用于管理和构建java项目的工具,它基于项目对象模(POM)的概念,通过一小段描述信息来管理项目的构建
所以Maven只是个工具!
Maven的作用
1:依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
有了Maven之后不用再手动导入jar包了,只需要在配置文件当中简单描绘一下所需要的依赖的信息,Maven会自动联网下载
关键解读:
依赖是什么?
在 Java 项目中,你需要使用许多第三方库(如 JUnit、Spring、Log4j 等)。这些库通常以 .jar
文件形式存在。
手动管理问题:你需要自己下载 .jar
文件,添加到项目路径,处理版本冲突,非常麻烦。
Maven 的解决方案:通过声明依赖的 坐标(GAV),Maven 会自动从仓库下载并管理这些 .jar
文件。
对于坐标下面会有解读
2:统一项目结构:提供标准,统一的项目结构
不论用哪种开发工具,生成的Maven结构都是一样的
src
main:实际项目资源
java:java源代码目录
resources:配置文件目录
test:测试项目资源
java
resources
pom.xml:项目配置文件(核心配置文件,当前工程所需要导入的依赖的信息都在这个配置文件中配置)
对于这个结构,创建过springboot项目的都应该知道,创建springboot项目时,只要勾选了maven,那么你的springboot项目的文件结构就是这样
这就是Maven最重要的两个应用
Maven坐标
Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
最重要的就是使用坐标来引入项目中需要的依赖
这部分内容 ,你需要打开maven目录的pom.xml文件
pom.xml的主要组成:
对于项目基础信息的介绍(名字和版本之类的)+项目所引用的依赖
信息介绍:
groupid:定义当前Maven项目隶属组织名称(通常是域名反写)
artifactid:定义当前Maven项目名称(通常是模块名称)
version:定义当前项目版本号
依赖管理:
依赖配置
在Maven的xml文件下,先写dependencies标签,再写dependency标签,在artifactId里写要依赖的包,在version里写版本,groupId里写组织Id
这就是maven对于依赖的配置
dependencies标签里边都是该项目所依赖的配置信息,通过一个一个的dependen分隔
注意:如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖
如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索
注:后边对仓库有详细解读
依赖的几个特点:
1:依赖传递
依赖具有传递性
直接依赖:在当前项目中通过依赖配置建立的依赖关系
简介依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
一个Maven文件可以依赖另一个Maven文件,这个文件里边的依赖包或文件,也会依赖那个Maven文件,可以理解为继承
注:可以在diagram中查看继承关系
如果A项目只想依赖B项目,而不想依赖B项目中依赖的文件,就可以使用排除依赖
2:排除依赖:排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
方法:先定义exclusions标签,再定义exclusion标签,需要排除的依赖定义在里边的group和artifactId,不需要version
在一个项目文件中,如果两个依赖传递了不同版本的 C,Maven 会按 最短路径优先 或 声明优先 原则选择版本。可以通过 <exclusions>
手动排除冲突依赖
3:依赖范围
依赖的jar包,默认情况下,可以在任何地方使用,可以通过<scope>…</scope>设置其作用范围
作用范围的种类:
1:主程序范围有效(main文件夹范围内)
2:测试程序范围有效(test文件夹范围内)
3:是否参与打包运行(package指令范围内)
compile(默认)主程序、测试程序、打包(运行)都有效
test 只在测试程序中有效
provided 在主程序和测试程序中有效
runtime 在测试程序和打包(运行)中有效
注意:Maven中自佩戴的打包插件只能把当前项目的资源打包进去,它所依赖的插件不能被打包进去,因此只能使用其他的打包插件
4: 生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
Maven中有3套相互独立的生命周期:
clean:清理工作
default:核心工作,如:编译、测试、打包、安装、部署等
site:生成报告、发布站点等
在Maven面板中罗列的有Maven的生命周期阶段(lifecycle)
在同一套生命周期中,运行后面的阶段,前面的阶段也会运行
如果想要跳过前边的阶段,则点击当前阶段后,再点击skip即可
主要的5个阶段:
clean:移除上一次构建生成的文件 执行完,target目录就没了
compile:编译项目源代码为字节码文件
test:使用合适的单元测试框架运行测试(junit)
package:将编译后的文件打包,如:jar、war等
install:将打包好的jar包或者war包安装到本地仓库
注:在lifecycle下面的Plugins中是生命周期阶段对应的插件,点击生命周期阶段其实是运行下面对应的插件
运行方式:
1:在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行
2:在命令行中,通过命令执行
上边都是抽象概念
Maven并不执行具体的操作,它的具体的操作是由与其绑定的Maven插件来完成的,它本质就是插件执行工作
补充:
Maven仓库:
分类:
1:本地仓库:位于开发者本地机器上(默认路径是 ~/.m2/repository
),存储项目依赖的构件(JAR、插件等),避免每次构建都从远程下载。
当 Maven 第一次运行时(例如执行 mvn clean install
),会在用户目录下创建本地仓库,初始状态下,本地仓库是空的,没有任何依赖或插件。即使本地仓库初始为空,Maven 本身会自带一些基础插件(如 maven-clean-plugin
、maven-resources-plugin
等),但这些插件的具体版本仍会从远程仓库下载并缓存到本地。
2:中央仓库:包含绝大多数开源库的公共依赖
3:远程仓库:包括私有仓库和其他公共仓库
补充:
当项目需要一个依赖时,Maven 会按照以下顺序查找:
1:先检查本地仓库,看本地仓库是否有这个依赖,有的话直接使用
2:如果配置了镜像(如阿里云)或私有仓库(如 Nexus),Maven 会尝试从这些仓库下载依赖如果没有,Maven会连接中央仓库去下载
3:一旦依赖从远程仓库成功下载,Maven 会自动将其缓存到本地仓库,后续构建直接使用本地副本,不再重复下载
需要注意:Maven中央仓库的下载速度是很慢的,因此非常推荐使用镜像,国内有很多私有仓库的依赖也很全,并且下载速度更高,因此使用镜像,从远程仓库去下载是更好的选择
Tomcat
它是一个纯 Java 的 HTTP Web 服务器,用于运行 Java Web 应用程序
对于Tomcat的理解,需要有一点网络编程的基础
在这里我用我自己的语言,去理解和解释这部分知识
你在浏览器中打开一个网页,背后是客户端与服务器的交互,客户端就是你的浏览器,向服务器发送请求,我要浏览这个网页,你给我加载出来,然后服务器向浏览器发送这个网页的内容
这个解释不太严谨但是很形象哈
Tomcat就是一个服务器,而且是为java服务的服务器,当你创建一个springboot项目时,你会不会疑惑注解的作用
对于Tomcat的配置的很简单,因此我这里重点讲述Tomcat与springboot的联系
Toncat集成在springboot里边了,但是为什么要这样做呢?
在上边所说的浏览器和服务器的交互,我们可以知道,在学习开发框架之前,我们的代码其实都是单机的,要想使我们的代码能够通过浏览器浏览到,就需要把我们写的java代码部署到服务器上
而springboot刚好集成了Tomcat服务器,因此我们可以通过springboot来把一个普通的java类的效果,能够被浏览器浏览到
底层原理:
Tomcat 是 Servlet 容器,负责接收 HTTP 请求,管理 Servlet 的生命周期(创建、调用、销毁)。本身不能直接运行普通 Java 类,只能运行符合 Servlet 规范 的类(如 HttpServlet)。而Spring Boot 提供 DispatcherServlet(核心 Servlet)继承自 HttpServlet,由 Tomcat 加载和管理。
它的作用是:
路由请求(找到对应的 @Controller 方法)
参数解析(如 @RequestBody、@RequestParam)
视图解析(返回 JSON/HTML 等)
普通 Java 类如何被 Tomcat 识别?
Spring Boot 通过注解(如 @Controller)将普通 Java 类转换成 Web 组件。
浏览器请求 → Tomcat → DispatcherServlet → Spring 找到对应的 @Controller 方法 → 执行业务逻辑 → 返回响应。
总结:
一个普通的java类,通过注解,被Tomcat识别,然后Tomcat将这个类里边所执行的信息返回给浏览器
在这部分的学习中,还有更加深入的知识,如三层架构/分层解耦等,这些还是比较重要的,因此,我将这部分内容转移到下篇文章中
Mybatis
想要了解Mybatis,你必须移步我的下一篇文章,普通的java类在Tomcat服务器
,因为Mybatis就是对三层架构的最后一层dao层的简便框架
介绍:
dao层是数据处理层,而在项目中,我们对于数据的处理一般是处理数据库,Mybatis简化了JDBC(操作数据库的规范),使得dao层更加简便的处理数据库中的数据
底层逻辑:
在图形化工具中,在图形化工具里敲写SQL语句,然后将语句发送给数据库服务器来执行,数据库服务器再将执行的结果返回给图形化工具
Mybatis与图形化工具与数据库服务器的交互逻辑相同
对于Mybatis,它的难度在于使用,跟springboot的交互就很简单了,上边说了,Mybatis就是dao层对数据库进行操作,将数据库里的数据,能够被springboot项目所使用,完成了springboot与数据库的连接
这篇文章为个人根据所学所总结的重难点理解,请勿转载,如有任何问题,请及时与我联系讨论
——迷糊小白告