Spring Boot 2系列教程4 - SpringMVC

先說說什麼是MVC

MVC(Model, View, Controller) 是模型(model)-視圖(view)-控制器(controller)的縮寫.

模型(model): 通俗的講就是數據建立的模型. 可以看做是一組數據集合.

視圖(View): 頁面響應的內容.

控制器(Controller): 主要控制視圖和模型做最後的處理的一層.

Spring Boot 2系列教程4 - SpringMVC

MVC的出現更好的避免原先代碼和視圖否揉在一起的群魔亂舞的時代.

描述一下這個場景, 當有用戶訪問我們的URL的時候, 需要做的就是找到該URL對應的Controller方法. 並把Controller方法裡面做的處理, 返回給用戶.

這裡有個關鍵點, 就是我們怎麼找到Controller方法, 並怎麼返回給請求的對象. 這個時候, 我們就需要了解一下SpringMVC框架. 其實它和其他的框架大同小異, SpringMVC屬於請求驅動. 就是說: 所有的設計都圍繞一箇中央的Servlet來處理. 它在負責把所有的請求分發到對應的控制器. 相當於找了一個大管家. 你有什麼要求, 就向它提. 這個時候, 他就負責給你找對應的控制器. 該控制器的名字叫做: DispatcherServlet. 來自: org.springframework.web.servlet.DispatcherServlet 擔任重要職責. 分析代碼可以看出來. 該類, 就是一個前端控制器模式.

DispatcherServlet: 看父類王上翻, 發現它其實就是一個Servlet(基類為HTTPServlet). 所以, 如果想要使用它, 你要做的就是配置web.xml 或者是Servlet3.x之後的Java Config 方式配置. 如果不使用SpringBoot 你會看到如下的代碼. 或者是與此類似的.

Spring Boot 2系列教程4 - SpringMVC

編程的方式(JavaConfig)

Spring Boot 2系列教程4 - SpringMVC

那在SpringBoot中, 如何加載的呢? 這裡就需要知道一個問題, 就是SpringBoot的所有自動化配置,

該包為: spring-boot-autoconfigure-2.1.0.RELEASE.jar 並以*AutoConfiguration.java命名.

所以找到包: org.springframework.boot.autoconfigure.web.servlet; 找到對應的DispatcherServletAutoConfiguration

Spring Boot 2系列教程4 - SpringMVC

具體的加載代碼:

Spring Boot 2系列教程4 - SpringMVC

SpringBoot中web的依賴, 其實就是SpringMVC, 它並沒有新創建什麼, 只是在原來的基礎上. 做了自動化. 什麼是自動化呢? 就是把一系列有規則的動作, 按照規則運行並使用.

Spring Web MVC

其實大家都是叫做SpringMVC, 但是官方文檔全程為Spring Web MVC. 就相當於JavaScript 叫做js一樣. 接下來我們引用SpringMVC框架.

加入對應的依賴. 這一個依賴就是完成了SpringMVC的依賴. 加入該依賴不需要寫一行配置文件, 就可以啟動一個Web項目.

Spring Boot 2系列教程4 - SpringMVC

這裡我們需要引用一個模板引擎. thymeleaf. 也是Spring官方推薦使用的.

Spring Boot 2系列教程4 - SpringMVC

從Spring Boot 2.x開始, 已經是基於thymeleaf的3.x版本了. 如下:

Spring Boot 2系列教程4 - SpringMVC

我們先看一下我們現在的項目架構圖.

Spring Boot 2系列教程4 - SpringMVC

目錄結構說明:

src/main/java 代表存放的是java源代碼

src/main/resources 代表是存放的配置文件, 或者是mybatis, hibernate的xml配置文件

src/test/java 代表存放的是Java的測試代碼

src/test/resources 代表存放測試代碼的配置文件

默認情況下 src/main/resources 是沒有目錄和文件的, 這個時候, 我們創建2個目錄, 一個叫做 static 一個叫做templates

static: springboot的默認靜態資源目錄. 可以在配置文件中修改.

templates: springboot的默認模版文件目錄. 可以在配置文件中修改.

新調整目錄如下:

Spring Boot 2系列教程4 - SpringMVC

接下來我們編寫頁面文件. 在templates 中加入 index.html

Spring Boot 2系列教程4 - SpringMVC

編寫Controller

Spring Boot 2系列教程4 - SpringMVC

這個時候, 我們訪問http://localhost:8080 或者 http://localhost:8080/index.html 就可以看到下面的效果.

Spring Boot 2系列教程4 - SpringMVC

我們簡單的描述一下這個流程. 我們在訪問該路徑時, 找到對應的Controller: @RequestMapping(value= {"", "index.html"})

根據該Controller返回了一個頁面. index, 該目錄的查找方式為: src/main/resources/templates/ + "index" + .html

我們如何引用一個js和css呢? 先在static 目錄中常見2個目錄 css 和 js 分別在目錄裡面創建 index.css 和 index.js

目錄結構如下:

Spring Boot 2系列教程4 - SpringMVC

這個時候, 我們在index.js裡面打開一個彈出框 在index.css中加入北京顏色為藍色.

Spring Boot 2系列教程4 - SpringMVC

然後, 我們在html中加入該引用.

Spring Boot 2系列教程4 - SpringMVC

這裡的路徑是從 src/main/resources/static/ 開始尋找. 路徑為:

  • src/main/resources/static/css/index.css
  • src/main/resources/static/js/index.js

頁面的效果為:

Spring Boot 2系列教程4 - SpringMVC

接下來我們就根據實際項目開發中的案例. 進行創建目錄.

Spring Boot 2系列教程4 - SpringMVC

然後我們從頂至下的說明. 先看HomeController.java

Spring Boot 2系列教程4 - SpringMVC

@Controller: 代表著這個是SpringMVC的一個控制器, SpringBoot會自動掃描該類.

Spring Boot 2系列教程4 - SpringMVC

可以看其源碼得知這是一個類註解. 並且使用了Spring IoC @Component代表是一個組件.

@RequestMapping: 代表具體的請求URI地址.

Spring Boot 2系列教程4 - SpringMVC

這是一個類和方法註解, 所以, 可以作用在類上也可以註解到方法上.

該註解主要有一下幾個方法:

Spring Boot 2系列教程4 - SpringMVC

name: 指定一個名稱給映射.

path: 在使用@RequestMapping("uri") 的情況下, 等同於path="uri"

Spring Boot 2系列教程4 - SpringMVC

value: 請求的URI路徑 可以是一組數據也可以是匹配符, 或者正則表達式

Spring Boot 2系列教程4 - SpringMVC

method: 請求的方法. 類型是: RequestMethod[] 這是一個枚舉數組.

Spring Boot 2系列教程4 - SpringMVC

params: 請求的參數

headers: Http的請求頭 例如: headers = "content-type=text/*"

consumes: 允許的媒體類型 例如: consumes = "text/plain" 或者 consumes = {"text/plain", "application/*"} 請求的類型必須匹配才能訪問.

produces: 響應的媒體類型, 例如: produces = "text/plain" produces = {"text/plain", "application/*"}, 相當於HTTP的Accept字段.

繼續完善代碼

Spring Boot 2系列教程4 - SpringMVC

使用@Autowired代碼把HomeService接口注入到當前控制器中. 用來操作HomeService.

Model 是向視圖傳遞數據用的對象. 常用的方法就是一個Key Value鍵值對.

Service接口:

Spring Boot 2系列教程4 - SpringMVC

實現類:

Spring Boot 2系列教程4 - SpringMVC

這裡不在完善dao的類, 後續加入數據庫在詳細的演示該操作.

頁面代碼:

Spring Boot 2系列教程4 - SpringMVC

然後訪問結果為:

Spring Boot 2系列教程4 - SpringMVC

具體的更加詳細的內容可以參考:

https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/web.html

github地址送上:

https://github.com/xymiao/book-springboot2jingsui


分享到:


相關文章: