運(yùn)行SpringBoot項(xiàng)目請(qǐng)求響應(yīng)流程分析以及404和500報(bào)錯(cuò)的解決辦法
1. 運(yùn)行項(xiàng)目
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication 是 Spring Boot 啟動(dòng)類注解
點(diǎn)擊啟動(dòng)類的 main 方法就可以運(yùn)行 Spring Boot 項(xiàng)目了,啟動(dòng)成功如下圖所示:

2. 輸出 Hello world
JavaEE 更多是圍繞著如何使用 Java 來(lái)進(jìn)行 web 開發(fā)。如果要和瀏覽器進(jìn)行交互,就需要使用 Spring Boot 來(lái)實(shí)現(xiàn)
在創(chuàng)建的項(xiàng)目包路徑下創(chuàng)建 UserController 文件,實(shí)現(xiàn)代碼如下:
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, Spring";
}
}
重新啟動(dòng)項(xiàng)目,訪問 127.0.0.1:8080/hello,最終效果如下:

3. Web 服務(wù)器
瀏覽器和服務(wù)器兩端進(jìn)行數(shù)據(jù)交互,使用的就是 HTTP 協(xié)議

前面文章已經(jīng)介紹了 HTTP 協(xié)議,知道了 HTTP 協(xié)議就是 HTTP 客戶端和 HTTP 服務(wù)器之間的交互數(shù)據(jù)的格式
Web 服務(wù)器就是對(duì) HTTP 協(xié)議進(jìn)行封裝,程序員不需要直接對(duì)協(xié)議進(jìn)行操作(自己寫代碼去解析 HTTP 協(xié)議規(guī)則),讓 Web 開發(fā)更加便捷,所以 Web 服務(wù)器也被稱為 WWW 服務(wù)器,HTTP 服務(wù)器,主要功能是提供網(wǎng)上的信息瀏覽服務(wù)
- 常見的
Web服務(wù)器有:Apache,Nginx,IIS,Tomcat,Jboss等
Spring Boot 內(nèi)置了 Tomcat 服務(wù)器,無(wú)需配置就可直接運(yùn)行

Tomcat 默認(rèn)端口號(hào)是 8080,所以我們程序訪問時(shí)的端口號(hào)也是 8080
4. 請(qǐng)求響應(yīng)流程分析
瀏覽器輸入 URL 之后,發(fā)起請(qǐng)求,就和服務(wù)器之間建立了連接

瀏覽器,輸入網(wǎng)址:127.0.0.1:8080/user/sayhi
- 通過
IP地址127.0.0.1定位到網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)(127.0.0.1就是本機(jī)) - 通過端口號(hào)
8080找到計(jì)算機(jī)上對(duì)應(yīng)的進(jìn)程,也就是在本地計(jì)算機(jī)中找到正在運(yùn)行的8080端口的程序 /user/sayhi是請(qǐng)求資源位置- 資源:對(duì)計(jì)算機(jī)而言資源就是數(shù)據(jù)
web資源:通過網(wǎng)絡(luò)可以訪問到的資源(通常指放在服務(wù)器上的數(shù)據(jù))
127.0.0.1:8080/user/sayhi,就是向本地計(jì)算機(jī)中的 8080 端口程序,獲取資源位置是 /user/sayhi 的數(shù)據(jù),然后發(fā)給服務(wù)器
服務(wù)器:
接收到瀏覽器發(fā)送的信息(如:/user/sayhi)在服務(wù)器上找到/user/sayhi 的資源把資源發(fā)給瀏覽器
5. 訪問出錯(cuò)怎么辦
404
404 表示用戶訪問的資源不存在,大概率是 URL 路徑寫的不正確
錯(cuò)誤實(shí)例 1:URL 單詞拼錯(cuò)

錯(cuò)誤實(shí)例 2:注解寫錯(cuò)
注釋寫錯(cuò)或者沒寫都會(huì)報(bào)錯(cuò)
@Controller
public class UserController{
@RequestMapping("/sayHi")
public String sayHi(){
return "hello, spring";
}
}
此時(shí)訪問也會(huì)報(bào)錯(cuò)

通過 Fiddler 觀察 http 請(qǐng)求

500
服務(wù)器出現(xiàn)內(nèi)部錯(cuò)誤,一般是服務(wù)器的代碼執(zhí)行過程中遇到了一些特殊情況(服務(wù)器異常崩潰),會(huì)產(chǎn)生這個(gè)狀態(tài)碼
錯(cuò)誤實(shí)例:
@RestController
public class UserController {
@RequestMapping("/sayHi") {
int res = 10/0;
return "hello, Spring";
}
}
重啟 Tomcat 服務(wù)器,重新訪問頁(yè)面,可以看到:

此時(shí),程序后端控制臺(tái)已經(jīng)打印了具體的異常調(diào)用棧

- 異常信息里已經(jīng)提示了出現(xiàn)異常的代碼是
UserController.java的第 11 行 - 錯(cuò)誤原因是算術(shù)異常:除數(shù)為 0
- 按照異常提示,去解決對(duì)應(yīng)的問題即可
一般是 Tomcat 啟動(dòng)失敗了

打開 Fiddler 的話,界面如下:

這種情況一般是服務(wù)器未啟動(dòng),也就是 Tomcat 未啟動(dòng),或者 IP/端口號(hào)寫錯(cuò)了
小結(jié)
熟悉 HTTP 協(xié)議能讓我們調(diào)試問題事半功倍
4xx的狀態(tài)碼標(biāo)識(shí)路徑不存在,往往需要向上檢查 URL 是否正確,和代碼中設(shè)定的 Context Path 以及 Servlet Path 是否一致5xx的狀態(tài)碼表示服務(wù)器出現(xiàn)錯(cuò)誤,往往需要觀察頁(yè)面提示的內(nèi)容和 Tomcat 自身的日志,觀察是否存在報(bào)錯(cuò)- 出現(xiàn)連接失敗往往意味著服務(wù)沒有正確啟動(dòng),也需要觀察服務(wù)器的自身日志是否有錯(cuò)誤提示
程序猿調(diào)試 BUG 如同醫(yī)生診病
一個(gè)有經(jīng)驗(yàn)的程序猿和一個(gè)新手程序猿相比,最大的優(yōu)勢(shì)往往不是代碼寫的多好,而是調(diào)試效率有多高。如同一個(gè)問題可能新手花了幾天都無(wú)法解決,但是有經(jīng)驗(yàn)的程序猿可能幾分鐘就搞定了
總結(jié)
Spring Boot 是為了快速開發(fā) Spring 而誕生的,Spring Boot 具備:
Spring Boot提供了啟動(dòng)添加依賴的功能,可以快速集成框架- 內(nèi)置
web服務(wù)器,無(wú)需配置Tomcat等web服務(wù)器,直接運(yùn)行和部署程序 - 可以完全拋棄繁瑣的
XML,使用注解和配置的方式進(jìn)行開發(fā) - 支持更多的監(jiān)控的指標(biāo),可以更好的了解項(xiàng)目的運(yùn)行情況等特點(diǎn)
Spring Boot可使用IDEA或網(wǎng)頁(yè)創(chuàng)建,它的設(shè)計(jì)思想是約定大于配置,類上標(biāo)注@SpringBootApplication就可以啟動(dòng)Spring Boot項(xiàng)目了
以上就是運(yùn)行Spring Boot項(xiàng)目請(qǐng)求響應(yīng)流程分析以及404和500報(bào)錯(cuò)的解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Spring Boot請(qǐng)求響應(yīng)404和500報(bào)錯(cuò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java并發(fā)編程包JUC線程同步CyclicBarrier語(yǔ)法示例
這篇文章主要為大家介紹了java并發(fā)編程工具包JUC線程同步CyclicBarrier語(yǔ)法使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
解決Tomcat啟動(dòng)報(bào)異常java.lang.ClassNotFoundException問題
這篇文章主要介紹了解決Tomcat啟動(dòng)報(bào)異常java.lang.ClassNotFoundException問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
詳解spring boot容器加載完后執(zhí)行特定操作
這篇文章主要介紹了詳解spring boot容器加載完后執(zhí)行特定操作,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-01-01
Java Benchmark 基準(zhǔn)測(cè)試的實(shí)例詳解
這篇文章主要介紹了Java Benchmark 基準(zhǔn)測(cè)試的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系
這篇文章主要介紹了Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考幾種,感興趣的小伙伴可以參考一下2022-09-09
Java 獲取當(dāng)前系統(tǒng)時(shí)間的三種方法
這篇文章主要介紹了Java 獲取當(dāng)前系統(tǒng)時(shí)間的三種方法,幫助大家利用Java處理時(shí)間,感興趣的朋友可以了解下2020-10-10
java類Circle定義計(jì)算圓的面積和周長(zhǎng)代碼示例
要用Java計(jì)算圓的周長(zhǎng)和面積,需要使用圓的半徑和一些數(shù)學(xué)公式,下面這篇文章主要給大家介紹了關(guān)于java類Circle定義計(jì)算圓的面積、周長(zhǎng)的相關(guān)資料,需要的朋友可以參考下2024-04-04

