引言作为一名 Java 开发者你一定听说过 Spring 框架。它功能强大、生态丰富但早年间的 Spring 项目往往伴随着繁琐的 XML 配置和复杂的依赖管理。为了简化开发流程Spring Boot 应运而生——正如其名它为 Spring 程序搭建了一个“脚手架”让我们能更快速、更高效地构建应用。本文将从环境准备开始带你了解 Maven 的核心概念、配置国内镜像源并最终使用 Spring Boot 创建一个简单的 Web 项目输出经典的 “Hello World”。一、环境准备在开始之前请确保你的开发环境满足以下要求IDEA 版本社区版2021.1 – 2022.1.4专业版无版本限制如果 IDEA 版本不在上述范围内建议卸载并重新安装注意删除注册表以免后续插件不兼容。二、Maven2.1 什么是 Maven为什么要学习 MavenMaven 是一个项目管理工具基于 POMProject Object Model项目对象模型的概念。Maven 可以通过一小段描述信息来管理项目的构建报告和文档的项目管理工具软件。学习 Maven 可以帮助我们提高开发的效率减少开发的 Bug。简单来说Maven 可以帮助我们管理依赖通过 pom.xml 文件声明项目所需的 jar 包无需手动下载和添加。项目构建提供标准化的构建流程编译、测试、打包、发布并支持跨平台使用。2.2 创建一个 Maven 项目由于 IDEA 中已经集成了 Maven无需我们手动安装可以直接使用。我这里使用的是专业版。点击 New Project将 Build System 改成 Maven 即可再点击 create 就成功创建了一个 Maven 项目。2.3 Maven 的核心功能接下来我们结合项目介绍 Maven 在项目开发中的作用具体体现在以下两个方面项目构建管理依赖2.3.1 项目构建Maven 提供了标准的跨平台的自动化项目构建方式。当我们开发一个项目后代码需要经过编译、测试、打包、发布等流程每次代码的修改都要经过这些流程如果代码反复修改就需要多次经过这些流程十分麻烦。Maven 给我们提供了一套简单的命令来完成项目的构建。点击 package就可以自动完成项目的打包操作打包好之后的 jar 包打包就是将所有的 class 文件全部放到一起打成 jar 包或者 war 包jar 包和 war 包都是一种压缩文件。jar 包就是把开发人员已经写好的代码进行打包打好的 jar 包就可以引入其他项目中也可以直接使用这些 jar 包中的类和属性。另外也可以打成可执行 jar 包这样的包可以通过java -jar命令来执行。war 包可以理解为是一个 web 项目里面是项目的所有东西通常用于网站。2.3.2 依赖管理上面说到Maven 是一个项目管理工具通过pom.xml文件的配置获取 jar 包而不用手动去添加 jar 包。这里获取到的 jar 包其实就是 “依赖”。pom.xml 文件就是 Maven 的配置文件用以描述项目的各种信息。依赖配置“依赖” 指的是当前项目运行所需要的 jar 包。比如前面所学的 JDBC我们需要手动下载 mysql-connector-java 的包并将其添加到项目中。如果使用 Maven我们只需要在 pom.xml 文件中引入 mysql-connector-java 的依赖即可。dependencies !--里面放置项目的依赖坐标, 可为多个 -- /dependencies在 pom 文件的 “dependencies” 标签中添加依赖坐标groupId、artifactId 和 versiondependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency /dependencies然后点一下刷新按钮就可以引入依赖的 jar 包如果没有这个的话就去右边的 maven 选项卡刷新稍等一会就可以看到原本的红波浪线就消失了这就表示已经成功引入 jar 包了。当我们打开项目选项卡中的 External Libraries就可以看到引入的 jar 包了依赖传递早期没有使用 Maven 时向项目中添加依赖的 jar 包需要把所有的 jar 包都复制到项目工程下。比如 A 依赖 B而 B 又依赖 C那么当我们引入 B 时也需要引入 C。如果我们手动管理依赖这个过程就会很麻烦需要知道哪些库都依赖哪些库以及这些依赖的版本之间是如何关联的。但是使用 Maven 的话就可以避免管理所需依赖的关系了。我们只需要在 pom 文件中定义直接依赖即可由于 Maven 的依赖具有传递性因此会自动把所依赖的其他 jar 包一起引入。依赖排除当前阶段我们需要依赖的库并不多但随着项目越来越复杂库之间的依赖关系也会变得越来越复杂。排除依赖指主动断开依赖的资源被排除的资源无需指定版本。Maven 中还有依赖调解、可选依赖等功能。依赖调解当项目中的依赖存在依赖冲突时如A-B-C-X(1.0) 和 A-D-X(2.0)Maven 就会优先选择最短路径选择依赖在这里2.0的路径最短因此选择X2.0。我们也可以指定选择依赖的版本。2.3.3 Maven Helper 插件当项目比较复杂时我们就会有 jar 包冲突的问题需要解决冲突的前提是找到冲突我们可以使用 Maven Helper 插件来观察包与包之间的依赖关系。插件就是在特定的场景对程序进行一些特定功能的拓展。安装插件在 settings 选项卡中找到 plugins点击 Marketplace 然后点击搜索 “Maven Helper”安装完成之后需要重启 IDEA 才能生效重启后打开 pom 文件就可以看到包与包之间的依赖关系了可以在包上点击右键排除掉2.4 Maven 仓库你可能会问为什么通过 pom 文件里的短短几行代码就可以将依赖 jar 包引入项目里具体是如何做到的呢dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency像这样的代码我们称之为 “坐标”是唯一的。在 Maven 中根据 groupId、artifactId 和 version 配置来识别一个唯一的 jar 包这三个缺一不可。当我们在 pom 文件中配置完依赖后点击刷新Maven 就会根据坐标的配置去仓库中寻找对应的 jar 包并下载下来添加到当前项目中。仓库是用于存放资源的地方管理着各种 jar 包。Maven 仓库的本质就是一个目录/文件夹这个目录被用来存储开发中用到的所有依赖jar 包、插件等等。Maven 仓库分为中央仓库远程仓库 和 本地仓库。这是远程仓库是国外的网站2.4.1 本地仓库本地仓库是指在自己的计算机上创建一个目录专门用来存储 jar 包。当项目需要引入某些 jar 包的时候会优先从本地仓库中查找对应坐标的 jar 包如果找到了就直接引入项目中否则去中央仓库下载对应的 jar 包到本地仓库中然后再引入项目。第一次的默认本地仓库位置是在 “用户” 文件夹中我们可以在 IDEA 中更改仓库到指定的位置新的路径是自定义的以后项目从中央仓库下载的 jar 包都会放到这个本地仓库中随着 Maven 的使用这个仓库会越来越大其中的 jar 包会越来越多。2.4.2 中央仓库Maven 软件中内置了一个远程仓库的地址这个仓库就是中央仓库它服务于整个互联网由 Maven 团队来负责维护全球唯一。中央仓库地址我们可以将自己写好的 jar 包上传至中央仓库也可以从中央仓库下载需要用到的 jar 包。查找 jar 的坐标通过网站https://mvnrepository.com/ 可以查找我们需要的 jar 包的坐标然后将坐标写入 pom 文件再刷新即可引入 jar 包。例如我们要查找 mysql 的 jar 包2.4.3 私有服务器私服私服是一般由公司团队搭建的私有服务器属于某个公司或者某个部门往往需要一定的权限才能访问。有了私服之后Maven 的下载顺序也发生了变化当 Maven 需要下载资源时优先从本地仓库获取如果本地仓库中有对应的资源获取到之后就返回如果本地仓库没有对应资源就从私服中获取如果私服中有对应资源获取到之后返回如果私服也没有对应资源那么就从中央仓库中下载如果中央仓库中存在就先缓存到私服中再缓存到本地仓库然后为 Maven 的下载请求提供服务如果中央仓库也没有对应资源那就报错私服很多人都在用只需要第一个人下载一次资源就可以了。2.5 Maven 设置国内源由于 Maven 仓库是国外的下载的时候可能会很慢因此可以选择借助国内的一些公开远程仓库来下载资源。配置当前项目打开 IDEA 的 settings 选项卡这里是 Maven 的配置文件地址最好不要包含中文。配置国内源接下来我们配置国内源可以在这里 Maven 镜像地址大全 找你喜欢的仓库我这里选择了阿里云的远程仓库。打开 settings.xml 文件找到 mirrors 节点添加对应远程仓库的镜像地址然后保存即可。设置新项目刚刚所做的都只是在当前项目生效我们还得设置新项目的 settings这样的话以后新建项目也会生效了。在左上角打开 File 选项卡找到 New Projects Setup - settings for New Projects然后和刚刚一样的操作这样新项目的 settings 就设置好了。三、Spring Boot3.1 什么是 Spring Boot我们先来认识一下 SpringSpring 官方网站Spring 能够让 Java 程序更加快速、简单且安全并且因为对于速度、简单性和生产力的关注而成为世界上最流行的 Java 框架。Spring 官方提供了很多开源项目覆盖范围从 Web 开发到大数据。Spring 发展到今天已经形成了自己的生态圈。我们在开发时也倾向于使用 Spring 官方提供的技术来解决对应的问题。上图的项目都是基于 Spring Framework 开发的但是 Spring Framework 存在配置多、入门难的问题因此 Spring 官方为了简化开发者的使用推出了 Spring Boot。Spring Boot 是为了简化 Spring 程序开发而诞生的。Spring Boot 就是 Spring 脚手架那什么是脚手架呢如图所示盖房子的时候通常都是先搭一个脚手架从而快速地进行房子的堆彻、成型。而 Spring Boot 就是 Spring 框架的脚手架能够使 Spring 程序快速开发从而简化开发流程、提高效率。3.2 Spring Boot 项目创建3.2.1 使用 IDEA 创建项目我们使用 IDEA 创建 Spring 项目有所区别如果是社区版则需要先安装一个插件才可以创建项目专业版默认内置了。社区版安装插件流程首先在 plugins 页面的 Marketplace 搜索 “Spring”找到 Spring Boot Assistant注意不要直接点击安装点击 “plugin homepage”进入页面后往下拉找到 “plugin versions”点击进入然后点击下载即可。然后返回 IDEA 在 plugins 页面找到 “Install plugin from Disk…”选择刚才下载的插件等安装完成后重启 IDEA 然后来 plugins 页面选 installed 就会看到安装好的插件注意安装好之后就不要管它了更新什么的更是不要动。创建 Spring Boot 项目社区版可能略有不同但是大体都差不多。这里引入的依赖是项目创建的时候就引入的第三方依赖。然后点击 “create”就可以创建项目了。注意第一次打开 Spring 项目需要加载的时间可能有点长这是因为当前 Spring 框架并没有下载到本地仓库。建议先配置好 Maven 的国内源再创建项目能够快一些创建项目。3.2.2 网页版创建了解即可不使用 IDEA 也可以创建 Spring Boot 项目可以使用官方提供的网页来创建。首先进入官方的网站Spring 官方网站然后点击 “quickstart”在跳转后的页面中往下拉找到 “start.spring.io” 这个网址点进去或者直接点击这个start.spring.io在 IDEA 创建项目时显示的界面就是来自于这个网站当网络不太好的情况下网站可能打不开点击 “generate”就会开始下载一个 Spring Boot 的 zip 包解压之后再使用 IDEA 打开就算这个 Spring Boot 项目创建成功了。3.3 项目代码和目录介绍我们打开项目的 pom 文件找到 “dependencies”dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies我们可以看到在 pom 文件中引入了两个依赖spring-boot-starter-web包含了 web 应用开发所需要的常见依赖spring-boot-starter-test包含了单元测试所需要的常见依赖父工程但是这两个依赖都没有写版本号却可以正常引入到项目中这是为什么呢其实当我们把鼠标放到依赖上面还是会显示版本号的说明其实已经有指定版本号的了而且本地仓库也是下载了的。那问题来了是什么时候指定的版本号呢因为每一个 Spring Boot 工程都会有一个父工程。依赖的版本号就是在父工程中进行统一管理的。父工程指定版本号之后就会自动引入对应版本号的依赖创建的 Spring Boot 项目也会继承 Spring Boot 父工程。我们在 pom 文件中找到 “parent” 标签找到 “spring-boot-starter-parent”点进去之后就可以看到版本号了目录介绍Spring Boot 项目中的目录src/main在 main 中的 java 目录下放着的就是 java 的源代码resources 目录下放着的是静态资源或配置文件static 是静态资源文件夹里面放着的是一写不需要服务器数据进行绑定的静态文件如前端页面templates 是模板资源文件夹主要用于存放动态模板文件比如 JSP, Freemarker, Thymeleaf 这些需要服务器动态渲染数据的文件src/testtest 中的 java 目录下放着的就是 java 代码的测试源代码target编译后的文件路径.gitignore提交 git 时忽略指定文件的工具pom.xmlMaven 的配置文件除了以上的文件/目录如果你的项目目录中出现了其他的文件删或者不删都看你个人喜好因为它们不重要。3.4 运行项目我们在 src/main/java 中找到带有 “Application” 的文件这个就是 Spring Boot 项目的启动类启动它整个项目就运行起来了。启动后当看到这一长串就说明启动成功了如果项目中的 “Application” 文件无法运行且 Maven 面板也不见了说明可能是配置出问题了退出 IDEA 后找到项目文件将 “.idea” 和 “target” (可选删掉然后打开 IDEA 选择 open打开含有 pom.xml 文件的项目这样会重新配置 Maven大概率就没问题了。3.5 输出 “Hello World”接下来我们使用 Spring Boot 来和浏览器进行交互。在刚才启动类的同一个目录底下创建一个 UserController import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController public class UserController { RequestMapping(/hello) public String hello() { return Hello World!; } }然后运行项目接着到浏览器上的 URL 栏输入 “http://127.0.0.1:8080/hello” 后敲回车就可以看到3.6 Web 服务器浏览器和服务器两端进行数据交互使用的是HTTP 协议。我们已经学习了 HTTP 协议知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式。Web 服务器就是对 HTTP 协议进行了封装让 Web 开发更加便捷的也称为 WWW 服务器、HTTP 服务器主要功能是提供网上信息浏览服务这使得程序员不用再自己写代码解析协议了。常见的 Web 服务器有Apache、Nginx、IIS、Tomcat、Jboss 等。Spring Boot 内置了 Tomcat 服务器的因此不需要手动配置就可以直接运行。由于Tomcat 的默认端口号是 8080因此我们程序访问时的端口号也是8080。3.7 请求响应流程分析当我们在浏览器输入 URL http://127.0.0.1:8080/hello 之后点击回车就发起了请求和服务器建立了连接这里的服务器指的是我们的 Spring Boot 程序。分析浏览器输入 URL http://127.0.0.1:8080/hello通过 IP 地址 “127.0.0.1” 定位到网络上的一台机器127.0.0.1 就是本机通过端口号 8080 找到计算机上对应的进程也就是在本地计算机中找到正在运行的端口号是 8080 的程序Tomcat“/hello” 是请求资源的位置资源对于计算机而言就是交互的数据web 资源是指通过网络可以访问到的资源通常指存放在服务器上的数据我们输入的 URL “http://127.0.0.1:8080/hello” 指的就是找到本地计算机端口 8080 的程序获取资源位置是 “/hello” 的数据然后端口 8080 的程序在服务器找 “/hello” 位置的资源数据并发送到浏览器。服务器也就是我们的 Spring Boot 程序当浏览器发送 URL服务器接收到后在程序中找到对应的资源然后把资源发送给浏览器响应。文章到这里就告一段落啦若有错误请尽管指出~完