運行SpringBoot項目請求響應流程分析以及404和500報錯的解決辦法
1. 運行項目
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 啟動類注解
點擊啟動類的 main 方法就可以運行 Spring Boot 項目了,啟動成功如下圖所示:

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

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

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

Tomcat 默認端口號是 8080,所以我們程序訪問時的端口號也是 8080
4. 請求響應流程分析
瀏覽器輸入 URL 之后,發(fā)起請求,就和服務器之間建立了連接

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

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

通過 Fiddler 觀察 http 請求

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

此時,程序后端控制臺已經(jīng)打印了具體的異常調用棧

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

打開 Fiddler 的話,界面如下:

這種情況一般是服務器未啟動,也就是 Tomcat 未啟動,或者 IP/端口號寫錯了
小結
熟悉 HTTP 協(xié)議能讓我們調試問題事半功倍
4xx的狀態(tài)碼標識路徑不存在,往往需要向上檢查 URL 是否正確,和代碼中設定的 Context Path 以及 Servlet Path 是否一致5xx的狀態(tài)碼表示服務器出現(xiàn)錯誤,往往需要觀察頁面提示的內容和 Tomcat 自身的日志,觀察是否存在報錯- 出現(xiàn)連接失敗往往意味著服務沒有正確啟動,也需要觀察服務器的自身日志是否有錯誤提示
程序猿調試 BUG 如同醫(yī)生診病
一個有經(jīng)驗的程序猿和一個新手程序猿相比,最大的優(yōu)勢往往不是代碼寫的多好,而是調試效率有多高。如同一個問題可能新手花了幾天都無法解決,但是有經(jīng)驗的程序猿可能幾分鐘就搞定了
總結
Spring Boot 是為了快速開發(fā) Spring 而誕生的,Spring Boot 具備:
Spring Boot提供了啟動添加依賴的功能,可以快速集成框架- 內置
web服務器,無需配置Tomcat等web服務器,直接運行和部署程序 - 可以完全拋棄繁瑣的
XML,使用注解和配置的方式進行開發(fā) - 支持更多的監(jiān)控的指標,可以更好的了解項目的運行情況等特點
Spring Boot可使用IDEA或網(wǎng)頁創(chuàng)建,它的設計思想是約定大于配置,類上標注@SpringBootApplication就可以啟動Spring Boot項目了
以上就是運行Spring Boot項目請求響應流程分析以及404和500報錯的解決辦法的詳細內容,更多關于Spring Boot請求響應404和500報錯的資料請關注腳本之家其它相關文章!
相關文章
MyBatis中resultType和parameterType和resultMap使用總結
這篇文章主要介紹了MyBatis中resultType和parameterType和resultMap使用總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Java ScheduledExecutorService的具體使用
ScheduledExecutorService有線程池的特性,也可以實現(xiàn)任務循環(huán)執(zhí)行,本文主要介紹了Java ScheduledExecutorService的具體使用,具有一定的參考價值,感興趣的可以了解一下2023-05-05
如何利用反射生成?MyBatisPlus中QueryWrapper動態(tài)條件
這篇文章主要介紹了如何利用反射生成?MyBatisPlus中QueryWrapper動態(tài)條件,分享在MyBatisPlus中經(jīng)常會用到代碼來構造查詢條件等內容,需要的小伙伴可以參考一下2022-02-02
詳解Springboot如何優(yōu)雅的進行數(shù)據(jù)校驗
基于?Spring?Boot?,如何“優(yōu)雅”的進行數(shù)據(jù)校驗呢,本文將待大家詳細介紹Springboot如何優(yōu)雅的進行數(shù)據(jù)校驗,文中有詳細的代碼示例和流程步驟,需要的朋友可以參考下2023-06-06
Spring Boot 結合 aop 實現(xiàn)讀寫分離
這篇文章主要介紹了Spring Boot 結合 aop 實現(xiàn)讀寫分離的示例,幫助大家更好的理解和使用Spring Boot框架,感興趣的朋友可以了解下2020-11-11
Java數(shù)據(jù)導入功能之讀取Excel文件實例
這篇文章主要介紹了Java數(shù)據(jù)導入功能之讀取Excel文件實例,本文給出了jar包的下載地址以及讀取Excel文件的代碼實例,需要的朋友可以參考下2015-06-06

