文章目录
- 1. Maven
- 1.1 什么是Maven
- 1.2 为什么要学Maven
- 1.3 创建一个Maven项目
- 1.4 Maven核心功能
- 1.4.1 项目创建
- 1.4.2 依赖管理
- 1.4.3 Maven Help插件
- 1.5 Maven仓库
- 1.5.1 本地仓库
- 1.5.2 中央仓库
- 1.5.3 私有服务器(私服)
- 1.6 Maven设置国内源
- 1.6.1 配置当前项目setting
- 2. 第一个SpringBoot程序
- 2.1 SpringBoot介绍
- 2.2 Spring Boot项目创建
- 2.2.1 使用Idea创建
- 2.2.2 网页版创建(了解)
- 2.3 项目代码和目录介绍
- 2.4 运行项目
- 2.6 Web服务器
- 2.7 请求响应流程分析
- 2.8 访问出错怎么办
- 2.8.1 404
- 2.8.2 500
- 2.8.3 无法访问此网站
- 2.8.4 小结
- 3. 总结
1. Maven
1.1 什么是Maven
Maven是一个项目管理工具。基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
大白话:Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,maven就跟预制菜是一个道理。通过pom.xml文件的描述来管理一个项目的构建。
1.2 为什么要学Maven
一句话:简单,方便,提高我们的开发效率,减少我们的开发Bug.
maven提供的功能非常多,目前的学习主要是以下两个方面:
1.项目构建
2.管理依赖
1.3 创建一个Maven项目
1.4 Maven核心功能
Maven在项目开发中的作用主要体现在下面两个方面:
1.项目构建
2.管理依赖
1.4.1 项目创建
Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的自动化项目构建方式当我们开发了一个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而Maven给我们提供了一套简单的命令来完成项目的构建。
打包就是把所有的.class文件,全部放在一起,打成jar包或者war包。
jar包和war包都是一种压缩文件
jar包就是把开发人员已经写好的一些代码进行打包.打好的jar包就可以引入到其他项目中,也可以直接使用这些jar包中的类和属性.另外也可以打成可执行jar包,这样的包就可以通过java-jar命令来执行
war包可以理解为是一个web项目,里面是项目的所有东西,通常用于网站.
这个maven命令是从上往下执行的,如果我们双击package这个命令,它就会执行package和package以前的命令。
1.4.2 依赖管理
Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包获取的jar包,其实就是依赖.
pom.xml 就是 maven 的配置文件,用以描述项目的各种信息。
项目要能够正常运行,就要依赖于第三方(除了jdk之外的)的一些东西。
依赖的坐标
依赖配置
依赖:指当前项目运行所需要的jar包
- 在pom.xm文件
<dependencies>
标签内,添加依赖坐标
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version>
</dependency>
- 点击刷新按钮,引入新加入的依赖jar包。
后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖.
- 刷新完之后,就可以在项目中看到新加入的jar包。
依赖传递
早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.比如A依赖B,B依赖C,那么A项目引I入B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。
但使用maven的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入
如上图,假如项目A通过Maven引入JarA,会自动引入JarB和JarC.
JarA 和项目B就是项目A的直接依赖。JarB,JarC是间接依赖。
直接依赖:在当前项目中通过依赖配置建立的依赖关系。
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。
依赖排除
当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂,如上图中,如果项目A不需要JarB,也可以通过排除依赖的方式来实现。
排除依赖:
指主动断开依赖的资源。(被排除的资源无需指定版本)
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.6</version><!- 排除依赖--><exclusions><exclusion><artifactId>spring-jcl</artifactId><groupId>org.springframework</groupId></exclusion></exclusions>
</dependency>
1.4.3 Maven Help插件
当项目比较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突.解决冲突之前,需要先找到冲突,我们可以使用MavenHelp插件来观察包和包之间的依赖关系.
安装之后,打开pom文件,可以看到Jar包之间的依赖关系。
也可以右键排除掉一些依赖。
1.5 Maven仓库
jar包都是从maven仓库中下载出来的。Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。
Maven仓库分为两大类:本地仓库和远程仓库.其中远程仓库又分为中央仓库,私服和其他公共库
1.5.1 本地仓库
本地仓库:自己计算机上的一个目录(用来存储jar包)
当项目中引l入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包1.如果有,则在项目直接引用。
2.如果没有,则去中央仓库中下载对应的jar包到本地仓库。
本地仓库地址可以通过Maven配置查看:
查看该仓库目录,可以看到该目录下有很多的jar(最开始是空的,随着Maven的使用,该仓库下文件会越来越多)
1.5.2 中央仓库
中央仓库地址
可以通过https://mvnrepository.com/这个网站来查询并下载。
- 访问https://mvnrepository.com/
- 进行查找,比如MySQL
- 选择要添加的jar包版本
- 查看jar包对应坐标
1.5.3 私有服务器(私服)
私服:一般由公司团队搭建的私有仓库
私服属于某个公司,或者某个部门,往往需要一定权限
有了私服之后,Maven依赖下载的顺序又发生了变化。
当Maven需要下载资源的时候
1.先从本地仓库获取,本地仓库存在,则直接返回
2.如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
3.如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了…
4.如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库里,再为Maven的下载请求提供服务
私服是很多人在使用的,所以只需要第一个使用者下载一次就可以了
1.6 Maven设置国内源
因为中央仓库在国外,所以下载起来会比较慢,所以咱们选择借助国内一些公开的远程仓库来下载资源接下来介绍,如何设置国内源
1.6.1 配置当前项目setting
2. 第一个SpringBoot程序
2.1 SpringBoot介绍
spring就是一个框架,是一个半成品,把一些项目公共的部分抽取出来。
spring是一个家族:
2.2 Spring Boot项目创建
2.2.1 使用Idea创建
2.2.2 网页版创建(了解)
不使用Idea 也可以创建Spring Boot 项目,我们可以使用 Spring 官方提供的网页版来创建SpringBoot项目。
网页版创建项目先访问:https://start.spring.io,如下图所示:
点击生成按钮会下载一个SpringBoot的zip包,解压zip之后目录如下:
然后再使用Idea打开之后,SpringBoot项目就算创建成功了,
2.3 项目代码和目录介绍
观察pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.0.2</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.demo.demos.DemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>
pom.xml文件里的具体信息,不需要过度关注,我们主要看标签里面的内容
pom文件中,引入了两个依赖
1.spring-boot-starter-web:包含了web应用开发所需要的常见依赖
2.spring-boot-starter-test:包含了单元测试所需要的常见依赖
父工程
这些依赖没有指定具体的版本号,但是我们的jar包也是正常引入到项目中了,并且查看的话,是有版本号的。
因为每一个SpringBoot工程,都有一个父工程.依赖的版本号,在父工程中统一管理.
父工程指定版本号后,就会自动引l入和所指定版本对应的依赖,创建的SpringBoot项目,会继承SpringBoot父工程.
目录介绍
SpringBoot项目有两个主要的目录:
- src/main/java:Java源代码
- src/main/resources:为静态资源或配置文件:
- /static:静态资源文件夹,比如前期学的js,cSs,html等静态文件,不需要服务器数据进行绑定的页面
- /templates:模版资源文件夹,主要存放动态模板文件,比如JSP,Freemarker,Thymeleaf等需要服务器动态渲染数据的文件
- src/test/java:测试代码源代码
- target:编译后的文件路径
- pom.xml:maven配置文件
2.4 运行项目
这个注解加到哪里,就说明项目的启动入口在哪里。
点击启动类的main方法就可以运行SpringBoot项目了,启动成功如下图所示:
2.6 Web服务器
浏览器和服务器两端进行数据交互,使用的就是HTTP协议。
HTTP协议就是HTTP客户端和HTTP服务器之间的交互数据的格式。
tomcat web 服务器
web服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析HTTP协议规则),让web开发更加便捷,所以web服务器也被称为WWW服务器,HTTP服务器,主要功能是提供网上信息浏览服务。
常见的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等
SpringBoot内置了Tomcat服务器,无需配置即可直接运行
Tocmat默认端口号是8080,所以我们程序访问时的端口号也是8080
一个tomcat可以运行多个项目,现在,spring Boot 集成了tomcat ,一个项目对应一个tomcat。
2.7 请求响应流程分析
浏览器输入URL(包含协议、域名、端口号、资源路径、查询字符串)之后,发起请求,就和服务器之间建立了连接。
浏览器:
- 输入网址:http://127.0.0.1:8080/hello。
- 通过IP地址127.0.0.1定位到网络上的一台计算机,127.0.0.1就是本机
- 通过端口号8080找到计算机上对应的进程,也就是在本地计算机中找到正在运行的8080端口的程序
- /user/sayhi是请求资源位置
- 资源:对计算机而言资源就是数据)
- web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)http://127.0.0.1:8080/user/sayhi,就是向本地计算机中的8080端口程序,获取资源位置是/user/sayhi的数据
8080端口程序,在服务器找/hello位置的资源数据,发给浏览器
服务器:
- 接收到浏览器发送的信息(如:/user/sayhi)
- 在服务器上找到/user/sayhi的资源
- 把资源发送给浏览器
2.8 访问出错怎么办
HTTP 状态码
1xx(信息性状态码):表示接收的请求正在处理.
2xx(成功状态码):表示请求正常处理完毕。
3xx(重定向状态码):需要后续操作才能完成这一请求
4xx(客户端错误状态码):表示请求包含语法错误或无法完成
5xx(服务器错误状态码):服务器在粗粒请求的过程中发生了错误。
2.8.1 404
404 表示用户访问的资源不存在,大概率是URL的路径写的不正确。
错误实例1:ur单词拼错
错误实例2:注解写错
@Controller
public class UserController {@RequestMapping("/sayHi")public String sayHi(){return "hello,Spring";}
}
访问时也会报错404
通过Fiddler观察Http请求
出现4开头的状态码,先检查请求是否正确,包含四个方面:
1.请求url
2.请求参数
3.请求格式
4.请求反方式:get / post
2.8.2 500
看到这个状态码,第一反应是去看项目控制台的日志
2.8.3 无法访问此网站
一般是tomcat启动失败了。
这种情况一般是服务未成功启动,也就是tomcat未启动,或者IP/端口写错
打开Fiddler的话,界⾯如下:
2.8.4 小结
Spring Framework:相当于是一个非常便捷的交通工具:火车
Spring MVC :相当于坐火车要去买车票,是那种原始的买票方式:火车站、火车票代售点。
Spring Boot :相当于现在的12306,里面不仅可以非常方便的去购买火车票,还集成了其他非常好用的第三方服务(保险,外卖…)
Spring :一般就是在描述spring家族
3. 总结
SpringBoot是为了快速开发Spring而诞生的,SpringBoot具备:
- SpringBoot提供了启动添加依赖的功能,可以快速集成框架。
- 内置web服务器,无需配置Tomcat等Web服务器,直接运行和部署程序
- 可以完全抛弃繁琐的XML,使用注解和配置的方式进行开发。
- 支持更多的监控的指标,可以更好的了解项目的运行情况等特点。
SpringBoot可使用Idea或网页创建,它的设计思想是约定大于配置,类上标注@SpringBootApplication就可以启动SpringBoot项目了.