文章目錄
- 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項目了.