javascript
Spring Boot框架从入门到精通
文章目錄
- SpringBoot介紹
- 定義
- 特點(diǎn)
- SpringBoot全新的pom.xml
- pom.xml
- eclipse第一個(gè)SpringBoot Project
- 創(chuàng)建maven project
- Update Maven
- 修改pom.xml
- 創(chuàng)建RunApp.java
- 創(chuàng)建HelloController.java
- 啟動(dòng)Tomcat WebServer
- 測(cè)試
- IDEA第一個(gè)SpringBoot Project
- 創(chuàng)建SpringBoot project
- 配置maven
- 創(chuàng)建RunApp.java
- 創(chuàng)建HelloController.java
- 測(cè)試
- 擴(kuò)展
- 執(zhí)行過(guò)程
- 常見(jiàn)問(wèn)題:8080端口沖突
- Apache Tomcat
- Web中間件歷史
- servlet-api.jar
- Git忽略特殊目錄和文件
- .gitignore
- 擴(kuò)展:請(qǐng)求響應(yīng)過(guò)程
- HTTP協(xié)議
- 執(zhí)行過(guò)程
- 谷歌瀏覽器查看請(qǐng)求響應(yīng)信息
- 頭信息
- 響應(yīng)頭
- 請(qǐng)求頭
SpringBoot介紹
定義
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。Spring Boot 現(xiàn)在已經(jīng)成為Java 開(kāi)發(fā)領(lǐng)域的一顆璀璨明珠,它本身是包容萬(wàn)象的,可以跟各種技術(shù)集成。成為SpringBoot全家桶。
特點(diǎn)
- 創(chuàng)建獨(dú)立的Spring應(yīng)用程序
- 嵌入的Tomcat,無(wú)需部署WAR文件
- 簡(jiǎn)化Maven配置
- 自動(dòng)配置Spring
- 提供生產(chǎn)就緒型功能,如指標(biāo),健康檢查和外部配置
SpringBoot全新的pom.xml
pom.xml
它產(chǎn)生整個(gè)項(xiàng)目目錄,其實(shí)我們只需pom.xml文件,覆蓋本地maven工程的pom.xml文件。
注:可以使用idea直接創(chuàng)建springboot項(xiàng)目,其本質(zhì)也是去調(diào)用上面的網(wǎng)站,只不過(guò)在本地訪問(wèn)外網(wǎng)https://start.spring.io。
修改pom.xml后,把項(xiàng)目進(jìn)行maven-update 操作,下載依賴的jar包。
<?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>cn.tedu</groupId><artifactId>jk</artifactId><version>0.0.1-SNAPSHOT</version><name>jk</name><description>Demo project for Spring Boot</description><!-- 提供相關(guān)的 Maven 默認(rèn)依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties><!-- 使用jdk8 --><java.version>1.8</java.version></properties><!-- 添加依賴 --><dependencies><!-- 使用springmvc構(gòu)建程序并使用默認(rèn)的嵌入式容器Tomcat --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 使用Junit測(cè)試springboot程序 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><!-- 添加插件 --><plugins><!-- springboot添加maven插件,會(huì)打包成一個(gè)可以直接運(yùn)行的 JAR 文件,直接部署到服務(wù)器 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>eclipse第一個(gè)SpringBoot Project
創(chuàng)建maven project
Update Maven
默認(rèn)jdk1.5,早已經(jīng)過(guò)氣,改成jdk1.8
修改pom.xml
添加SpringBoot的依賴包
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.tedu</groupId><artifactId>jkboot</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>創(chuàng)建RunApp.java
SpringBoot使用了全新的運(yùn)行方式,兩句話,直接執(zhí)行main方法,默認(rèn)啟動(dòng)tomcat中間件,端口為8080。
注意:類必須放在其他類的父級(jí)目錄,它底層使用了包掃描機(jī)制,掃描的要求只掃描本類所在的目錄極其子目錄。
package cn.tedu.jk;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication //標(biāo)識(shí)為springboot項(xiàng)目 public class RunApp {public static void main(String[] args) {//全新的啟動(dòng)方式,執(zhí)行run方法會(huì)自動(dòng)啟動(dòng)集成的tomcat中間件SpringApplication.run(RunApp.class, args);} }創(chuàng)建HelloController.java
目前市場(chǎng)主流已經(jīng)采用注解方式進(jìn)行開(kāi)發(fā)
package cn.tedu.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController//接受瀏覽器的請(qǐng)求 并返回json數(shù)據(jù) public class HelloController { // @RequestMapping("hi")//只匹配一個(gè)路徑@RequestMapping({"hi","hello/hi"})//匹配兩種路徑/hi或者/hello/hipublic String hi() {return "hi springboot!";} }啟動(dòng)Tomcat WebServer
ApacheTomcat是一個(gè)非常著名的web中間件,于之前學(xué)習(xí)的技術(shù)的不同在于它提供了web程序的容器環(huán)境,專門(mén)用于網(wǎng)站服務(wù)。
SpringBoot默認(rèn)集成了tomcat中間件,會(huì)自動(dòng)把項(xiàng)目打包jar發(fā)布到tomcat,這樣我們就形成了自己的網(wǎng)站。但這個(gè)網(wǎng)站只能局域網(wǎng)訪問(wèn),如果外網(wǎng)(廣域網(wǎng)),自己購(gòu)買一個(gè)網(wǎng)站,部署上去即可。
注意:不用服務(wù)時(shí),關(guān)閉tomcat服務(wù)
測(cè)試
http://localhost:8080/hello/hi # 某個(gè)web服務(wù)的根請(qǐng)求 http://localhost:8080/hi # /hi的某個(gè)具體請(qǐng)求url解析:
- localhost代表本機(jī),等價(jià)于ip:127.0.0.1
- 8080代表本機(jī)的服務(wù),tomcat默認(rèn)端口8080
- /hi等請(qǐng)求地址在一個(gè)web服務(wù)中請(qǐng)求具有唯一性(多個(gè)就沒(méi)法區(qū)分了)
IDEA第一個(gè)SpringBoot Project
創(chuàng)建SpringBoot project
配置maven
創(chuàng)建RunApp.java
package cn.tedu.cotroller;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Controller;@SpringBootApplication @Controller public class RunApp {public static void main(String[] args) {SpringApplication.run(RunApp.class, args);}}創(chuàng)建HelloController.java
package cn.tedu.cotroller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController//接受瀏覽器的請(qǐng)求 并返回json數(shù)據(jù) public class HelloController {// @RequestMapping({"hi","hello/hi"})//匹配兩種路徑/hi或者/hello/hi@RequestMapping("hi")//只匹配一個(gè)路徑public String hi() {return "hi springboot!";}}測(cè)試
擴(kuò)展
執(zhí)行過(guò)程
url** 的解析執(zhí)行過(guò)程:**
瀏覽器輸入的url,就會(huì)被解析后傳入web中間件(/hi),web中間件再會(huì)進(jìn)一步的解析,找到對(duì)應(yīng)的Controller的某個(gè)注解里對(duì)應(yīng)的url @RequestMapping({"/","/hi"}) ,從而就找到HelloController的hi()方法。最終利用反射執(zhí)行這個(gè)類的方法(將來(lái)這個(gè)方法中就用來(lái)編寫(xiě)實(shí)現(xiàn)業(yè)務(wù)邏輯代碼)。因?yàn)槭褂昧?#64;RestController,返回的String字符串對(duì)象底層會(huì)使用jackson工具類轉(zhuǎn)換java對(duì)象為json字符串,返回給瀏覽器,瀏覽器將字符串回顯(展示)在頁(yè)面上。
常見(jiàn)問(wèn)題:8080端口沖突
Tomcat服務(wù)不會(huì)自動(dòng)關(guān)閉,需要手動(dòng)關(guān)閉,如不關(guān)閉,下次啟動(dòng)就會(huì)報(bào)下面錯(cuò)誤:
port 8080 was already in use. 端口8080已經(jīng)被占用。關(guān)閉服務(wù),重新啟動(dòng)即可。
仍未解決的話,以下三種方式任選一個(gè)來(lái)測(cè)試.
1,需要執(zhí)行DOS命令處理:
C:\Users\lpx>netstat –ano --查看所有端口號(hào),找到8080端口對(duì)應(yīng)的PID號(hào) C:\Users\lpx>taskkill -pid 688 –f --殺死688進(jìn)程號(hào)2,可能是因?yàn)殡娔X里安裝過(guò)Oracle數(shù)據(jù)庫(kù):
要找到Oracle的服務(wù)OracleXETNSListener,停掉.3,直接使用yml方式配置修改端口號(hào):
在src/main/resources下添加application.yml文件,內(nèi)容如下:
server:port: 8090清除項(xiàng)目緩存,再次重啟服務(wù),測(cè)試即可: http://localhost:8090/hello/hi
Apache Tomcat
Web中間件歷史
最早的網(wǎng)站技術(shù)是Apache,但它只支持html。當(dāng)微軟推出asp技術(shù)后,第一代動(dòng)態(tài)網(wǎng)站技術(shù)誕生,微軟同時(shí)推出了ISS以支持asp技術(shù)。隨著sun公司的j2ee架構(gòu)橫空出世,提出第二代動(dòng)態(tài)網(wǎng)站技術(shù)規(guī)范servlet、jsp后,servlet容器就如雨后春筍。Tomcat、Jetty、GlassFish、JBoss、WebSpare、WebLogic,后三者非常厲害,性能超群,但由于昂貴的費(fèi)用及微服務(wù)新架構(gòu)的興起,而開(kāi)始沒(méi)落,Jetty一直號(hào)稱性能遠(yuǎn)勝Tomcat,但Tomcat的霸主地位已經(jīng)難以撼動(dòng)(就像編程語(yǔ)言中的java)。目前市場(chǎng)主流都采用Tomcat,特別國(guó)內(nèi)一線互聯(lián)網(wǎng)企業(yè),而國(guó)企采用WebSpare和WebLogic居多。
servlet-api.jar
我們按sun公司的java規(guī)范寫(xiě)的servlet(HttpServlet)就專門(mén)支持網(wǎng)站的請(qǐng)求request(HttpServletRequest)和響應(yīng)response(HttpServletResponse)的處理。
各大web中間件廠商按照servlet規(guī)范做自己的實(shí)現(xiàn)如tomcat的servlet-api.jar。
注:我們的關(guān)注點(diǎn)在于實(shí)現(xiàn)項(xiàng)目,這里會(huì)使用tomcat,初步了解底層結(jié)構(gòu),不必過(guò)渡深入研究。
Git忽略特殊目錄和文件
.gitignore
在git工作空間的根目錄下創(chuàng)建文本文件 .gitignore git忽略,配置如下:
.gitignore*.class#maven ignore target/*#eclipse ignore .settings/ .project .classpath注意:target臨時(shí)目錄配置了不生效
git rm -r --cached . #把本地緩存刪除(改變成未track狀態(tài)),然后再提交通過(guò)變通方式暫時(shí)解決:配置 *.class,禁止上傳class文件
擴(kuò)展:請(qǐng)求響應(yīng)過(guò)程
HTTP協(xié)議
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫(xiě),是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。HTTP是一個(gè)基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)(HTML文件、圖片文件、查詢結(jié)果等)。
執(zhí)行過(guò)程
怎么瀏覽器輸入url就可以找到我們寫(xiě)的controller進(jìn)行執(zhí)行并且返回呢?
其實(shí)這底層是有一套標(biāo)準(zhǔn)的,這個(gè)標(biāo)準(zhǔn)稱為HTTP協(xié)議。我們?yōu)g覽器成輸入的http://這就代表執(zhí)行http協(xié)議。
谷歌瀏覽器查看請(qǐng)求響應(yīng)信息
頭信息
響應(yīng)頭
請(qǐng)求頭
總結(jié)
以上是生活随笔為你收集整理的Spring Boot框架从入门到精通的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js更新数组对象_7 种Vue 数据已更
- 下一篇: mysql读写分离_MySQL基于amo