目錄
- 1.入門案例總結
- 2. 入門案例工作流程分析
- 2.1 啟動服務器初始化過程
- 2.2 單次請求過程
歡迎大家回到《Java教程之Spring30天快速入門》,本教程所有示例均基于Maven實現,如果您對Maven還很陌生,請移步本人的博文《如何在windows11下安裝Maven并配置以及 IDEA配置Maven環境》,本文的上一篇為《SpringMVC入門案例代碼示例》
1.入門案例總結
SpringMVC入門程序開發總結(1+N)
- 一次性工作
- 創建工程,設置服務器,加載工程
- 導入坐標
- 創建web容器啟動類,加載SpringMVC配置,并設置SpringMVC請求攔截路徑
- SpringMVC核心配置類(設置配置類,掃描controller包,加載Controller控制器bean)
- 多次工作
- 定義處理請求的控制器類
*定義處理請求的控制器方法,并配置映射路徑(@RequestMapping)與返回json數據(@ResponseBody) - 多次工作我們可以通過實現一個用戶的刪除功能來體驗一把
- controller類中編寫刪除方法
- 定義處理請求的控制器類
//2.制作控制器類,等同于Servlet
//2.1必須是一個spring管理的bean
//2.2定義具體處理請求的方法
//2.3設置當前方法的訪問路徑
//2.4設置響應結果為json數據
@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("user save ...");return "{'module':'springmvc'}";}@RequestMapping("/delete")@ResponseBodypublic String delete(){System.out.println("user delete ...");return "{'module':'springmvc delete '}";}
}
- 重啟服務器,訪問http://localhost/delete ,可以看得如下效果
最后針對本案例中出現的Tomcat的Servlet容器配置再來總結下: - AbstractDispatcherServletInitializer類是SpringMVC提供的快速初始化Web3.0容器的抽象類
- AbstractDispatcherServletInitializer提供三個接口方法供用戶實現
- createRootApplicationContext()方法,如果創建Servlet容器時需要加載非SpringMVC對應的bean,使用當前方法進行,使用方式同createServletApplicationContext()
- createServletApplicationContext()方法,創建Servlet容器時,加載SpringMVC對應的bean并放入WebApplicationContext對象范圍中,而WebApplicationContext的作用范圍為ServletContext范圍,即整個web容器范圍
- ngetServletMappings()方法,設定SpringMVC對應的請求映射路徑,設置為/表示攔截所有請求,任意請求都將轉入到SpringMVC進行處理
- createServletApplicationContext用來加載SpringMVC環境
- createRootApplicationContext用來加載Spring環境
2. 入門案例工作流程分析
為了更好的使用SpringMVC,我們將SpringMVC的使用過程總共分兩個階段來分析,分別是啟動服務器初始化過程和單次請求過程
2.1 啟動服務器初始化過程
- 服務器啟動,執行ServletContainersInitConfig類,初始化web容器
- 執行createServletApplicationContext方法,創建了WebApplicationContext對象
- 該方法加載SpringMVC的配置類SpringMvcConfig來初始化SpringMVC的容器
- 加載SpringMvcConfig配置類
- 執行@ComponentScan加載對應的bean
- 掃描指定包下所有類上的注解,如Controller類上的@Controller注解
- 加載UserController,每個@RequestMapping的名稱對應一個具體的方法
* 此時就建立了 /save 和 save方法的對應關系
6. 執行getServletMappings方法,定義所有的請求都通過SpringMVC
- /代表所攔截請求的路徑規則,只有被攔截后才能交給SpringMVC來處理請求
2.2 單次請求過程
- 發送請求localhost/save
- web容器發現所有請求都經過SpringMVC,將請求交給SpringMVC處理
- 因為符合上面第六步設置的請求路徑,所以該請求會交給SpringMVC來處理
- 解析請求路徑/save
- 由/save匹配執行對應的方法save()
- 上面的第五步已經將請求路徑和方法建立了對應關系,通過/save就能找到對應的save方法
- 執行save()
- 檢測到有@ResponseBody直接將save()方法的返回值作為響應求體返回給請求方