快速入門Spring MVC 一篇就夠了

語言: CN / TW / HK

theme: channing-cyan highlight: a11y-dark


持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第11天,點選檢視活動詳情

前言

我們前面學習了Spring兩大核心機制IoC和AOP,接下來我們一起來學習Spring MVC。這篇文章帶你快速入門Spring MVC。

Spring MVC概述

Spring MVC是目前主流的實現MVC設計模式的框架,是Spring框架的一個分支產品,以Spring loC容器為基礎,並利用容器的特性來簡化它的配置。Spring MVC相當於Spring的-一個子模組,可以很好的和Spring結合起來進行開發,是Java Web開發者必須要掌握的框架。

什麼是MVC設計模式?

將應用程式分為Controller Model View 三層,Controller 接收客戶端請求,呼叫Model生成業務資料,傳遞給View,Spring MVC就是對這套流程的封裝,遮蔽了很多底層程式碼,開放出介面,讓開發者可以更加輕鬆、便捷地完成基於MVC模式的Web開發。

MVC核心元件

  • DispatcherServlet: 前置控制器,是整個流程控制的核心,控制其他元件的執行,進行統一排程,降低元件之間的耦合性,相當於總指揮。

  • Handler: 處理器,完成具體的業務邏輯,相當於Servlet 或Action。

  • HandlerMapping: DispatcherServlet 接收到請求之後,通過HandlerMapping將不同的請求對映到不同的Handler。

  • HandlerInterceptor: 處理器攔截器,是-一個介面,如果需要完成- -些攔截處理, 可以實現該介面。

  • HandlerExecutionChain: 處理器執行鏈,包括兩部分內容: Handler 和HandlerInterceptor (系統會有一個預設的HandlerInterceptor,如果需要額外設定攔截,可以新增攔截器)。

  • HandlerAdapter: 處理器介面卡,Handler執行業務方法之前,需要進行- -系列的操作,包括表單資料的驗證、資料型別的轉換、將表單資料封裝到JavaBean等,這些操作都是由HandlerApater來完成,開發者只需將注意力集中業務邏輯的處理上,DispatcherServlet 通過HandlerAdapter執行不同的Handler。

  • ModelAndView: 裝載了模型資料和檢視資訊,作為Handler的處理結果,返回給DispatcherServlet。

  • ViewResolver: 檢視解析器,DispatcheServlet 通過它將邏輯檢視解析為物理檢視,最終將渲染結果響應給客戶端。

Spring MVC的工作流程

  • 客戶端請求被DisptacherServlet接收。

  • 根據HandlerMapping對映到Handler。

  • 生成Handler和HandlerInterceptor。

  • Handler 和HandlerInterceptor以HandlerExecutionChain的形式一併返回給DisptacherServlet。

  • DispatcherServlet 通過HandlerAdapter呼叫Handler的方法完成業務邏輯處理。

  • Handler 返回一個ModelAndView給DispatcherServlet。

  • DispatcherServlet將獲取的ModelAndView物件傳給ViewResolver檢視解析器,將邏輯檢視解析為物理檢視View。

  • ViewResovler 返回-個View給DispatcherServlet。

  • DispatcherServlet 根據View進行檢視渲染。

  • DispatcherServlet 將渲染後的結果響應給客戶端。

建立第一個Spring MVC專案

前面我們講了這麼多的理論,看起來非常的複雜,其實,在我們實際開發中,Spring MVC使用起來還是比較簡單的,其中很多的過程Spring都會自動去處理好。下面我們就來建立自己的第一個Spring MVC專案。

1.建立一個maven專案

微信截圖_20221006231241.png 這裡建立maven專案不同於我們之前,這裡需要勾選Create from archetype並選擇archetype-webapp,後面就很簡單,一路next下去就ok。

建立專案之後,需要稍等幾分鐘下載一些依賴。

微信截圖_20221007000540.png 建立完成之後就是這麼個目錄結構。webapp包中存放的是webapp的一些元件。

在main目錄下建立java資料夾用於存放Java程式碼,然後右鍵點選java資料夾。 微信截圖_20221007000920.png

2.在pom.xml中引入spring-webmvc依賴 js <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.15</version> </dependency>b 3.spring.xml配置 ```js

``` 自動掃描我們應該比較熟悉,之前在AOP中有配置過。

這個檢視解析器呢實際上就是相當於把邏輯檢視解釋成物理檢視,這麼說可能比較抽象。比如我們一個方法返回了一個homepage,我們這時需要將homepagehomepage.jsp匹配起來,我們就需要配個字首和字尾,prefixsuffix分別就是字首和字尾的意思。字首是在homepage前面寫的/表示根目錄,字尾即寫在homepage後面的就是.jsp

4.在web.xml中配置DispatcherServlet

```js dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring.xml

dispatcherServlet / ```

5.建立Handler

在java檔案下建立一個包,我的包名為com.controller,包下建立FirstHandlerjava檔案。

```js package com.controller;

import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;

@Controller public class FirstHandler {

@RequestMapping("/homepage")
public String homepage(){
    System.out.println("開啟homepage");
    return "homepage";
}

} ```

程式碼解析

@Controller註解與@Component註解類似,都是將類交給IoC容器來進行管理,但與@Component不同的是,@Controller多了一個控制器的功能。

homepage()就是我們的業務方法,這時我們需要將業務方法和控制器關聯起來,我們就需要用到 @RequestMapping註解引數為"/homepage",這樣在我們在瀏覽器中訪問http://localhost:8080/homepage的時候,我們就能執行homepage()方法,這個方法又返回一個"homepage"相當於一個邏輯檢視,這樣再配合我們前面配置的檢視解析器就能找到我們的homepage.jsp檔案了。

6.建立homepage.jsp檔案 js <html> <head> <title>Title</title> </head> <body> <h1>HelloWorld</h1> </body> </html> 這樣我們Spring MVC的基本環境就配置好了,接下來要執行我們的專案就需要配置tomcat。

配置tomcat

1.首先,我們點選ADD Configurations,如圖所示:

微信截圖_20221009094503.png

2.然後,點選左上角的+號。

微信截圖_20221009094836.png

3.在左側邊欄中找到Tomcat Server並點選Local。

微信截圖_20221009095129.png

4.點選Deplyment,再點選+號,將專案war包新增進來。

微信截圖_20221009095232.png

微信截圖_20221009095411.png

5.修改Application context。

微信截圖_20221009095526.png 我們去掉後面的直接訪問根目錄。然後點選Apply和ok就可以了。

啟動專案

執行專案,然後我們在瀏覽器中訪問http://localhost:8080/homepage就能看到我們的頁面了。

微信截圖_20221009095843.png

這樣我們就完成了Spring MVC的基本的環境搭建。

對Spring MVC感興趣的小夥伴們支援一下,後面的內容我會持續更新。