文章目录一、Maven1.1 Maven 简介1.2 Maven 的核心功能1.2.1 项目构建1.2.2 依赖管理1.3 Maven 仓库1.3.1 本地仓库1.3.2 中央仓库1.3.3 私服二、第一个 SpringBoot 程序2.1 Spring Boot介绍2.2 Spring Boot 项目创建2.3 目录介绍2.4 输出 Hello world三、Web 服务器四、总结首先环境准备IDEA 专业版。社区版要弄很多东西版本配 spring 之类的IDEA 专业版可以网上找找破解版。在 Java Web 这里大部分概念都只要了解即可不用记。一、Maven这部分内容不涉及实战主要是一些重要概念的介绍。1.1 Maven 简介官方对于 Maven 的描述引用来自Maven 官网翻译过来就是Maven 是一个项目管理工具。基于 POM (Project Object Model项目对象模型的概念Maven 可以通过一小段描述信息来管理项目的构建报告和文档的项目管理工具软件。POM 简介每一个 Maven 工程都有一个pom.xml文件位于根目录中包含项目构建生命周期的详细信息。通过pom.xml文件我们可以定义项目的坐标、项目依赖、项目信息、插件信息等等配置。简单来说Maven 是一个项目管理工具通过 pom.xml 文件的配置获取 jar 包而不用手动去添加 jar 包。Maven 的作用一句话简单方便提高我们的开发效率减少我们的开发 Bug。1.2 Maven 的核心功能Maven 提供的功能非常多主要体现在下面两个方面。项目构建管理依赖1.2.1 项目构建Maven 提供了标准的跨平台(LinuxWindowsMacOS等)的自动化项目构建方式。当我们开发了一个项目之后代码需要经过编译测试打包发布等流程每次代码的修改都需要经过这些流程如果代码反复调试修改这个流程就需要反复进行就显得特别麻烦而 Maven 给我们提供了一套简单的命令来完成项目的构建。1.2.2 依赖管理如果使用 Maven 构建产生的构件例如 Jar 文件被其他的项目引用那么该构件就是其他项目的依赖。在下面的 Maven 中央仓库中你可以找到项目所需的依赖。Maven 中央仓库下面为导入 Mysql 依赖。dependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency /dependencies配置说明dependencies一个 pom.xml 文件中只能存在一个这样的标签是用来管理依赖的总标签。dependency包含在 dependencies 标签中可以有多个每一个表示项目的一个依赖。groupId: 定义了当前 Maven 项目隶属的组织或公司。groupId 一般分为多段通常情况下第一段为域第二段为公司名称。域又分为 org、com、cn 等其中 org 为非营利组织com 为商业组织cn 表示中国。artifactId定义了当前 Maven 项目的名称项目的唯一的标识符对应项目根目录的名称。version定义了 Maven 项目当前所处版本。依赖传递早期我们没有使用 maven 时向项目中添加依赖的 jar 包需要把所有的 jar 包都复制到项目工程下。比如 A 依赖 B。B 依赖 C。那么 A 项目引入 B 的同时也需要引入 C如果我们手动管理这个依赖这个过程就会比较麻烦我们需要知道每个库都依赖哪些库以及这些依赖之间的版本是如何关联的。使用 maven 的话就可以避免管理所需依赖的关系。我们只需要在 pom 文件中定义直接依赖就可以了由于 maven 的依赖具有传递性所以会自动把所依赖的其他 jar 包也一起导入。如上图项目 A 通过 Maven 引入 Jar A 时会自动引入 Jar B和 Jar C。Jar A 和项目 B 就是项目 A 的直接依赖。Jar B。Jar C 是间接依赖。依赖冲突对于 Maven 而言同一个 groupId 同一个 artifactId 下只能使用一个 version。若相同类型但版本不同的依赖存在于同一个 pom 文件只会引入后一个声明的依赖。项目的两个依赖同时引入了某个依赖如同上图的 Jar C 为了避免依赖重复Maven 只会选择其中的一个进行解析。 Maven 在遇到这种问题的时候会遵循路径最短优先和声明顺序优先两大原则。解决这个问题的过程也被称为Maven 依赖调解。路径最短优先根据上图来进行理解。依赖链路1项目 A - Jar A - Jar C 。dis 2依赖链路2项目 A - 项目 B - 项目 C - Jar C。dis 3在这种情况下就会采用依赖链路 1 的 Jar C 依赖。很容易能发现如果依赖链路的长度一样这该怎么办所以又引入声明顺序优先。声明顺序优先在依赖路径长度相等的前提下哪个依赖先被声明那么就使用其依赖。依赖排除当前阶段我们需要依赖的库并不多但随着项目的越来越复杂库之间的依赖关系也会变得越来越复杂。如上图中如果项目 A 不需要Jar B也可以通过排除依赖的方式来实现。依赖排除指主动断开依赖的资源。被排除的资源无需指定版本我们可以通过exclusion标签手动删除依赖。dependency groupIdorg.springframework/groupId artifactIdspring-core/artifactId version5.3.33/version !--排除依赖-- exclusions exclusion artifactIdspring-jcl/artifactId groupIdorg.springframework/groupId /exclusion /exclusions /dependency如果觉得上面依赖排除操作有点麻烦可以在 IDEA 上安装 Maven Help 插件1.3 Maven 仓库我们通过短短几行代码就把依赖 jar 包放在了项目里具体是如何做的呢dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.30/version /dependency这个代码我们称之为 “坐标”也就是唯一的。在 Maven 中根据 groupId、artifactId、version 的配置来唯一识别一个 jar 包缺一不可。当我们在 pom 文件中配置完依赖之后点击刷新Maven 会根据坐标的配置去仓库里寻找 Jar 包并把他下载下来添加到项目中。这个 Jar 包下载的地方就称为仓库。仓库用于存储资源管理各种 jar 包。Maven 仓库分为两大类本地仓库和远程仓库。其中远程仓库又分为中央仓库私服和其他公共库。1.3.1 本地仓库本地仓库自己计算机上的一个目录(用来存储 jar 包)当项目中引入对应依赖 jar 包后首先会查找本地仓库中是否有对应的 jar 包。如果有则在项目中直接引用。如果没有则去中央仓库中下载对应的 jar 包到本地仓库。本地仓库地址可以通过 Maven 配置查看1.3.2 中央仓库中央仓库maven 软件中内置一个远程仓库地址就是中央仓库服务于整个互联网。由 Maven 团队维护全球唯一。仓库地址中央仓库可以通过中央仓库网站来查询并下载。我们可以把自己写好的 Jar 包上传到中央仓库(具备一定的要求)也可以从中央仓库下载 Jar 包。1.3.3 私服私服一般由公司团队搭建的私有仓库。私服属于某个公司或者某个部门往往需要一定权限。有了私服之后Maven 依赖下载的顺序又发生了变化。当 Maven 需要下载资源的时候先从本地仓库获取本地仓库存在则直接返回。如果本地仓库没有就从私服请求私服存在该资源就直接返回。如果私服上不存在该资源则从中央仓库下载中央仓库不存在就报错了。如果中央仓库中存在就先缓存在私服上之后再缓存到本地仓库里再为 Maven 的下载请求提供服务。私服是很多人在使用的所以只需要第一个使用者下载一次就可以了。二、第一个 SpringBoot 程序2.1 Spring Boot介绍在学习 SpringBoot 之前我们先来认识一下 Spring。我们看下 Spring 官方(spring 官网)的介绍。可以看到Spring 让 Java 程序更加快速简单和安全。Spring 对于速度、简单性和生产力的关注使其成为世界上最流行的 Java 框架。Spring 官方提供了很多开源的项目覆盖范围从 Web 开发到大数据Spring 发展到了今天已经形成了自己的生态圈。我们在开发时也倾向于使用 Spring 官方提供的技术来解决对应的问题。Spring Boot 的诞生是为了简化 Spring 程序开发的。Spring Boot 翻译一下就是 Spring 脚手架什么是脚手架呢如下图所示盖房子的这个架子就是脚手架脚手架的作用是砌筑砖墙浇筑混凝土、方便墙面抹灰装饰和粉刷的简单来说就是使用脚手架可以更快速的盖房子。而 Spring Boot 就是 Spring 框架的脚手架它是为了快速开发 Spring 框架而诞生的。2.2 Spring Boot 项目创建New Project。按照下图红色框框选择名称什么的自己取不同版本的页面会有出路不过问题不大。按照下图配置点击创建即可。之所以不选择带 SNAPSHOT是因为这是非稳定版本可能会发生变化。出现下面这个页面就基本已经成功了不能有报错一定要即使处理。第一次创建 spring 项目时间要花比较久有很多东西需要下载。启动项目spring 一创建就可以启动在 SpringBootApplication 标识的类启动类中启动这个项目启动是不会自动结束的如果没有报错那么恭喜你成功创建了一个 spring 项目。2.3 目录介绍src/main/java: Java 源代码。src/main/resources为静态资源或配置文件。src/test/java测试代码源代码。target编译后的文件路径。pom.xmlmaven 配置文件。2.4 输出 Hello world在创建的项目包路径下创建 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; } }重新启动项目访问 127.0.0.1:8080/hello 最终效果如下三、Web 服务器浏览器和服务器两端进行数据交互使用的就是 HTTP 协议。前面我们已经学习了 HTTP 协议知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式。Web 服务器就是对 HTTP 协议进行封装程序员不需要直接对协议进行操作自己写代码去解析 http 协议规则)让 Web 开发更加便捷所以 Web 服务器也被称为 WWW 服务器HTTP 服务器主要功能是提供网上信息浏览服务。常见的 Web 服务器有Apache,NginxIISTomcatJboss等。SpringBoot 内置了 Tomcat 服务器无需配置即可直接运行。Tocmat 默认端口号是 8080所以我们程序访问时的端口号也是 8080。请求响应流程分析浏览器输入 URL 之后发起请求就和服务器之间建立了连接。浏览器输入网址 127.0.0.1:8080/hello通过 IP 地址 127.0.0.1 定位到网络上的一台计算机127.0.0.1 就是本机。通过端口号 8080 找到计算机上对应的进程也就是在本地计算机中找到正在运行的 8080 端口的程序。/hello 是请求资源位置资源对计算机而言资源就是数据。web资源通过网络可以访问到的资源。127.0.0.1:8080/hello 就是向本地计算机中的 8080 端口程序获取资源位置是 /hello 的数据。8080 端口程序在服务器找 /hello 位置的资源数据发给浏览器。服务器接收到浏览器发送的信息。在服务器上找到对应的资源。把资源发送给浏览器。四、总结最开始学习 Spring 的时候会遇到很多问题更多是环境相关的问题。我们不仅要学习 Spring 代码的基本写法更重要的是学习排查错误的思路。熟悉 HTTP 协议能让我们调试问题事半功倍。4xx 的状态码标识路径不存在往往需要检查 URL 是否正确。5xx 的状态码表示服务器出现错误往往需要观察页面提示的内容和 Tomcat 自身的日志观察是否存在报错。出现连接失败往往意味着服务没有正确启动也需要观察服务器的自身日志是否有错误提示。参考Maven JavaGuide结语其实写博客不仅仅是为了教大家同时这也有利于我巩固知识点和做一个学习的总结由于作者水平有限对文章有任何问题还请指出非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注这可以激励我写出更加优秀的文章。