初識 SpringMVC,執行配置第一個Spring MVC 程式

Rainbow-Sea發表於2024-06-22

1. 初識 SpringMVC,執行配置第一個Spring MVC 程式

@

目錄
  • 1. 初識 SpringMVC,執行配置第一個Spring MVC 程式
    • 1.1 什麼是 MVC
  • 2. Spring MVC 概述
    • 2.1 Spring MVC 的作用:
  • 3. 執行配置第一個 Spring MVC 程式
    • 3.1 第一步:建立Maven模組
    • 3.2 第二步:新增 web 支援
    • 3.3 第三步:配置 web.xml檔案
    • 3.4 第四步:編寫控制器 FirstController
    • 3.5 第五步:配置springmvc-servlet.xml檔案
    • 3.6 第六步:根據自行定義好的檢視解析器(的配置),提供檢視
    • 3.7 第七步:控制器 FirstController 處理請求返回邏輯檢視名稱
    • 3.8 第八步:執行 Tomcat 測試
    • 3.9 執行流程總結:
  • 4. 第一個 Spring MVC 程式最佳化:
    • 4.1 在web.xml 配置檔案中 ,手動自定 spring mvc 的配置檔案
    • 4.2 配置 thymeleaf 翻譯為 html 的模板
    • 4.3 編寫 IndexController 定義個“首頁”
    • 4.4 測試
  • 5. 總結:
  • 6. 最後:

1.1 什麼是 MVC

MVC 是一種軟體架構模式(是一種軟體架構設計思想,不僅僅是Java開發中用到,其它語言也需要用到),它將應用分為三塊。

  • M: Model (模型)
  • V:View (檢視)
  • C:Controller (控制器)

應用為什麼要被分為三塊,優點是什麼?

  • 低耦合,擴充套件能力增強
  • 程式碼複用性增強
  • 程式碼可維護性增強
  • 高內聚,讓程式設計師更加專注業務的開發。

MVC 將應用分為三塊,每一塊各司其職,都有自己專注的事情要做,它們屬於分工協作,互相配合:

  • Model :負責業務處理及資料的收集
  • View:負責資料的展示
  • Controller:負責排程,它是一個排程中心,它來決定什麼時候呼叫Model 來處理業務,什麼時候呼叫 View 檢視來展示資料。

MVC 架構圖模式如下:所示

在這裡插入圖片描述

MVC 架構模式的描述:前端瀏覽器傳送請求給 Web 伺服器,Web 伺服器中的 Controller 接收到使用者的請求,Controller 負責將前端提交的資料進行封裝,然後 Controller 呼叫 Model 來處理業務,當Model 處理完業務後,會返回處理之後的資料給 Controller,Controller 再呼叫 View 來完成資料的展示,最終將結果響應給瀏覽器,瀏覽器進行渲染展示頁面的內容。

面試題:什麼是三層模型,並說一說MVC架構模式與三層模型的區別?

在這裡插入圖片描述

MVC 和 三層模型都採用了分層結構來設計應用程式,都是降低耦合度,提高擴充套件力,提高元件複用性,區別在於:它們的關注點不同,三層模型更關注業務邏輯元件的劃分。

MVC 架構模式關注的是整個應用程式的層次關係和分離思想。現代的開發方式大部分都是 MVC 架構模式結合三層模型一起用的。

更多關於 MVC 架構的內容大家可以移步至:✏️✏️✏️ MVC 三層架構案例詳細講解_mvc三層架構-CSDN部落格

2. Spring MVC 概述

Spring MVC 是一個實現了MVC架構模式的 Web 框架,底層基於 Servlet 實現。

Spring MVC 已經將MVC架構模式實現了,因此只要我們基於 Spring MVC 框架寫程式碼,編寫的程式就是符合 MVC架構模式的。(MVC的架子已經為我們搭好了,我們只需要添添補補即可)

Spring 框架中有一個子專案叫做:Spring Web,Spring Web 子專案當中包含很多模組,例如:

  • Spring MVC
  • Spring WebFlux
  • Spring Web Services
  • Spring Web Flow
  • Spring WebSocket
  • Spring Web Services Client

可見 Spring MVC 是 Spring Web 子專案當中的一個模組,因此也可以說 Spring MVC 是Spring 框架的一部分。

所以學習 Spring MVC 框架之前要先學習 Spring 框架中的 IOC 和 AOP 等內容。

另外,使用Spring MVC 框架的時候,同樣也可以始於 IOC 和 AOP 。

關於 Spring的學習內容,大家可以移步至:✏️✏️✏️ Spring_ChinaRainbowSea的部落格-CSDN部落格

下面是 Spring 官方給出的 Spring 架構圖,其中的 Web 中的 Servlet 指的就是 Spring MVC 部分

在這裡插入圖片描述

2.1 Spring MVC 的作用:

Spring MVC 框架能幫我們做什麼,與 純粹的 Servlet 開發有什麼區別?

  1. 入口控制:Srping MVC 框架透過 DispatcherServlet 作為 入口控制器,負責接收請求和分發請求。而在 Servlet 開發中,需要自己編寫 Servlet 程式,並在 web.xml 進行配置,才能接受和處理請求。
  2. 在 Spring MVC 中,表單提交時,可以自動將表單資料繫結到相應的 Java Bean 物件中,只需要在控制器方法的引數列表中宣告該JavaBean物件即可,無需手動獲取和賦值表單資料。而在純粹的 Servlet 開發中,這些都是需要自己手動完成的。
  3. IOC容器:SpringMVC 框架透過IOC容器管理物件,只需要在配置檔案中進行相應的配置即可,獲取例項物件,而在 Servelt 開發中需要手動建立物件例項。
  4. 統一處理請求:Spring MVC 框架提供了攔截器,異常處理器等統一處理請求的機制,並且可以靈活地配置這些處理器。而在 Servelt 開發中,需要自動編寫過濾器,異常處理器等,增加了程式碼的複雜度和開發難度。
  5. 檢視解析:Spring MVC 框架提供了多種檢視模組,如:JSP,Freemarker,Velocity等,並且支援國際化,主題等特性。而在Servlet開發中需要手動處理檢視層,增加了程式碼的複雜度。

總之,與 Servelt 開發相比,Spring MVC 框架可以幫我們節省很多時間和精力,減少程式碼的複雜度,更加專注於業務開發。同時,也提供了更多的功能和擴充套件性,可以更好地滿足企業級應用的開發需求。

3. 執行配置第一個 Spring MVC 程式

3.1 第一步:建立Maven模組

第一步:建立Empty Project,起名:springmvc。
img
第二步:設定springmvc工程的JDK版本:Java21。
img
第三步:設定maven。
img
第四步:建立Maven模組
img
img

第五步:將pom.xml檔案中的打包方式修改為 war

在這裡插入圖片描述

<packaging>war</packaging>

第六步:新增以下依賴

  • Spring MVC依賴
  • 日誌框架Logback依賴
  • Servlet依賴
  • Spring6和Thymeleaf整合依賴

在這裡插入圖片描述

注意點:

這裡我們是在一個單獨的 Spring MVC 框架的容器中,配置的 Servlet依賴 ,而我們的 web 專案是執行在 Tomcat 伺服器當中的,Tomcat 伺服器本身就帶 servlet 的依賴,防止衝突,以及重複,佔用不必要的資源。所以我們在:Servlet依賴 jar 包下,設定: <scope>provided</scope> 指定依賴的訪問,provided 表示這個依賴由第三方容器來提供,打war包的時候,這個依賴不會打入war包內,因為這個依賴由其它容器來提供的。就避免了在 Tomcat 當中重複了。同時注意:我們這裡用的是:jakarta.servlet 包下的 Servlet 依賴,所以要用的 tomcat9以上才行,至於為什麼要 Tomcat9以上(這裡我使用的是 Tomcat 10 ),大家可以移步至:✏️✏️✏️ javaEE Web(Tomcat)深度理解 和 Servlet的本質_jakarta ee 部署 web server-CSDN部落格

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>springmvc-001</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--    打包方式: war -->
    <packaging>war</packaging>



    <dependencies>
        <!-- Spring MVC依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.1.4</version>
        </dependency>
        <!--日誌框架Logback依賴-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.3</version>
        </dependency>
        <!--Servlet依賴-->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
<!--            指定依賴的訪問,provided 表示這個依賴由第三方容器來提供-->
<!--            打war包的時候,這個依賴不會打入war包內,因為這個依賴由其它容器來提供的-->
<!--            為什麼這麼做:是因為,我們的tomcat本身就帶 servlet 的依賴,防止衝突,以及重複-->
<!--            同時注意:我們這裡用的是:jakarta.servlet 所以要用的 tomcat9以上才行-->
            <scope>provided</scope>
        </dependency>
        <!--Spring6和Thymeleaf整合依賴-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
    </dependencies>


</project>

3.2 第二步:新增 web 支援

第一步:在 main 目錄下建立一個 webapp目錄。注意:目錄名必須是:webapp ,不可以為其它的。

在這裡插入圖片描述

注意:一般情況下,我們新增了webapp ,IDE是會自動給我們新增上一個小藍點的,如果沒有的話,需要我們自己手動新增。

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

注意 web.xml 檔案的位置:E:\Java\SpringMVC\SpringMVC\springmvc-001\src\main\webapp\WEB-INF\web.xml
注意版本選擇:6.0

在這裡插入圖片描述

手動在 WEB-INF 前面新增上 src\main\webapp路徑。因為我們的WEB-INF 要在 webapp 目錄下才行。在這裡插入圖片描述

在這裡插入圖片描述

img

3.3 第三步:配置 web.xml檔案

Spring MVC 是一個 web 框架,在 java web 中誰來負責接收請求,處理請求,以及響應?

當然是 Servlet ,在 Spring MVC 框架中已經為我們寫好了一個 Servlet ,它的名字叫做:DispatcherServlet ,我們稱其為前端控制器 ,既然是 Servlet,那麼它就需要在 web.xml 檔案中進行配置。

在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">

    <!--SpringMVC提供的前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- /* 表示任何一個請求都交給DispatcherServlet來處理 -->
        <!-- / 表示當請求不是xx.jsp的時候,DispatcherServlet來負責處理本次請求-->
        <!-- jsp本質就是Servlet,因此如果請求是jsp的話,應該走它自己的Servlet,而不應該走DispatcherServlet -->
        <!-- 因此我們的 url-pattern 使用 / -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

注意:

在這裡插入圖片描述

<url-pattern>/</url-pattern> 配置為 / 的作用意義是:

/* 表示任何一個請求都交給DispatcherServlet來處理 -->
/ 表示當請求不是xx.jsp的時候,DispatcherServlet來負責處理本次請求-->
jsp本質就是Servlet,因此如果請求是jsp的話,應該走它自己的Servlet,而不應該走DispatcherServlet 
 <!-- 因此我們的 url-pattern 使用 / -->

DispatcherServlet 是 Spring MVC 框架為我們提供的最核心 的類。它是整個 Spring MVC 框架的前端控制器。負責接收 HTTP 請求,將請求路由到處理程式,處理響應資訊,最終將響應返回給客戶端。DispatcherServlet 是 Web 應用程式的主要入口之一,它的職責包括:

  1. 接收客戶端的 HTTP 請求:DispatcherServlet 監聽來自 Web 瀏覽器的 HTTP 請求,然後根據請求的 URL 將請求資料解析為 Request 物件。
  2. 處理請求的 URL:DispatcherServlet 將請求的URL(Uniform Resource Locator)與處理程式進行匹配,確定要呼叫哪個控制器(Controller) 來處理此請求。
  3. 呼叫相應的控制器:DispatcherServlet 將請求傳送給找到的控制器處理,控制器將執行業務邏輯,然後返回一個模型物件(Model)
  4. 渲染檢視:DispatcherServlet 將呼叫檢視物件引擎,將模型物件呈現為使用者可以檢視的 HTML 頁面。
  5. 返回響應給客戶端:DispatcherServlet 將使用者生成的響應傳送回瀏覽器,響應可以包括:表單,JSON,XML,HTML 以及其它型別的資料。

DispatcherServlet 工作流程圖:

在這裡插入圖片描述

3.4 第四步:編寫控制器 FirstController

DispatcherServlet 接收到請求之後,會根據請求路徑分發到對應的Controller,Controller 來負責處理請求的核心業務。在Spring MVC 框架中 Controller 是一個普通的Java類(一個普通的POJO類,不需要繼承任何類或實現任何介面),需要注意的是:POJO類要納入 IOC 容器來管理,POJO類的生命週期由 Spring 來管理,因此要使用註解標註@Controller

在這裡插入圖片描述

package com.rainbowsea.springmvc.controller;


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

@Controller // 該註解表示,將該類交給 Spring IOC 容器管理
public class FirsController {



}

3.5 第五步:配置springmvc-servlet.xml檔案

SpringMVC框架有它自己的配置檔案,該配置檔案的名字預設為:-servlet.xml,預設存放的位置是WEB-INF 目錄下:

在這裡插入圖片描述

當然,這個預設的,都是可以透過配置修改的。關於這部分的內容,在後續更新文章當中會說明的。

要在該 -servlet.xml 配置檔案當中,配置如下兩項資訊:

  1. 第一項:元件掃描,Spring 掃描這個包中的類,將這個包中的類例項化並納入IOC容器當中進行管理。

  2. 第二項:檢視解析器:檢視解析器(View Resolver) 的作用主要是將Controller 方法返回的邏輯檢視名稱解析成實際的檢視物件。檢視解析器將解析出的檢視物件返回給 DispatcherServlet,並最終由 DispatcherServlet 將該檢視物件轉化為響應結果,呈現給使用者。

  3. 注意:如果採用了其它檢視,請配置對應的檢視解析器,例如:

    • JSP的檢視解析器:InternalResourceViewResolver

    • FreeMarker檢視解析器:FreeMarkerViewResolver

    • Velocity檢視解析器:VelocityViewResolver

第一項:元件掃描,Spring 掃描這個包中的類,將這個包中的類例項化並納入IOC容器當中進行管理。

在這裡插入圖片描述

在這裡插入圖片描述

第二項:檢視解析器:檢視解析器(View Resolver) 的作用主要是將Controller 方法返回的邏輯檢視名稱解析成實際的檢視物件。檢視解析器將解析出的檢視物件返回給 DispatcherServlet,並最終由 DispatcherServlet 將該檢視物件轉化為響應結果,呈現給使用者

在這裡插入圖片描述

在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!--    Spring MVC 框架的配置檔案-->

<!--    元件掃描-->
    <context:component-scan base-package="com.rainbowsea.springmvc.controller"></context:component-scan>


    <!--檢視解析器-->
    <bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
        <!--作用於檢視渲染的過程中,可以設定檢視渲染後輸出時採用的編碼字符集-->
        <property name="characterEncoding" value="UTF-8"/>
        <!--如果配置多個檢視解析器,它來決定優先使用哪個檢視解析器,它的值越小優先順序越高-->
        <property name="order" value="1"/>
        <!--當 ThymeleafViewResolver 渲染模板時,會使用該模板引擎來解析、編譯和渲染模板-->
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring6.SpringTemplateEngine">
                <!--用於指定 Thymeleaf 模板引擎使用的模板解析器。模板解析器負責根據模板位置、模板資源名稱、檔案編碼等資訊,載入模板並對其進行解析-->
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
                        <!--設定模板檔案的位置(字首)-->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!--設定模板檔案字尾(字尾),Thymeleaf副檔名不一定是html,也可以是其他,例如txt,大部分都是html-->
<!--                        將來要在 xxx.thymeleaf 檔案中編寫符合 Thymeleaf 語法格式的字串-> 也被稱之為"模板字串"-->
                        <property name="suffix" value=".thymeleaf"/>
                        <!--設定模板型別,例如:HTML,TEXT,JAVASCRIPT,CSS等-->
                        <property name="templateMode" value="HTML"/>
                        <!--用於模板檔案在讀取和解析過程中採用的編碼字符集-->
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

注意:

<property name="prefix" value="/WEB-INF/templates/"/>
                        <!--設定模板檔案字尾(字尾),Thymeleaf副檔名不一定是html,也可以是其他,例如txt,大部分都是html-->
<!--                        將來要在 xxx.thymeleaf 檔案中編寫符合 Thymeleaf 語法格式的字串-> 也被稱之為"模板字串"-->
                        <property name="suffix" value=".thymeleaf"/>
                        <!--設定模板型別,例如:HTML,TEXT,JAVASCRIPT,CSS等-->
                        <property name="templateMode" value="HTML"/>
                        <!--用於模板檔案在讀取和解析過程中採用的編碼字符集-->
                        <property name="characterEncoding" value="UTF-8"/>

在這裡插入圖片描述

3.6 第六步:根據自行定義好的檢視解析器(的配置),提供檢視

在這裡插入圖片描述

在WEB-INF目錄下新建 templates目 錄,在 templates 目錄中新建 thymeleaf 檔案,例如:first.thymeleaf,並提供以下程式碼:

在這裡插入圖片描述

在這裡插入圖片描述

注意:這個是 Thymeleaf的模板字串,只有:Thymeleaf的模板引擎才可以解析,雖然看上去是:html,但是它不是 html,本質上是 Thymeleaf的模板字串,瀏覽器是看不懂的的。只有將這些資訊,交給 Thyemeleaf 檢視解析器翻譯真正轉化為了 html程式碼(的時候才是真正的html),

,瀏覽器才能看懂。至於為什麼是 html 呢,是因為這裡我們配置的 Thymeleaf 檢視解析器,就是配置的翻譯為 html 檔案,當然也可以配置翻譯為其它的型別的檔案。

在這裡插入圖片描述

3.7 第七步:控制器 FirstController 處理請求返回邏輯檢視名稱

在這裡插入圖片描述

package com.rainbowsea.springmvc.controller;


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

@Controller // 該註解表示,將該類交給 Spring IOC 容器管理
public class FirsController {



    // 請求對映
    // 這個方法是一個例項方法
    // 這個方法目前返回一個String 字串
    // 返回值代表一邏輯檢視名稱,一個邏輯檢視名稱,會對應上一個真正的物理上的檔案
    @RequestMapping(value = "/test")
    public String hehe() {
        // 返回一個邏輯檢視名稱
        return "first";
    }


}

@RequestMapping 註解標識:該請求的路徑對映。

注意:方法名隨意,但是返回型別一定要是String 字串的型別,因為這個返回值是一個邏輯檢視的名稱 是一個字串。

什麼是邏輯檢視名稱

在這裡插入圖片描述

最終會將邏輯檢視名稱轉換為物理檢視名稱
> 邏輯檢視名稱:first
> 物理檢視名稱: 字首 + first + 字尾
> 最終路徑是:/WEB-INF/templates/first.thymeleaf
> 使用Thymeleaf 模板引擎,將/WEB-INF/templates/first.thymeleaf轉換成 html程式碼,最終響應到瀏覽器端

3.8 第八步:執行 Tomcat 測試

注意:由於我們這裡匯入的是:jakarta.servlet 包下的 servelt 所以要用,Tomcat 9 以上的版本才行,這裡我使用的是 Tomcat 10

在這裡插入圖片描述

第一步:配置Tomcat伺服器

img

img

第三步:啟動Tomcat伺服器。如果在控制檯輸出的資訊有中文亂碼,請修改tomcat伺服器配置檔案:apache-tomcat-10.1.19\conf\logging.properties

img

第四步:開啟瀏覽器,在瀏覽器位址列上輸入地址:http://localhost:8080/springmvc/test

在這裡插入圖片描述

3.9 執行流程總結:

  1. 瀏覽器傳送請求:http://localhost:8080/springmvc/haha
  2. SpringMVC的前端控制器DispatcherServlet接收到請求
  3. DispatcherServlet根據請求路徑 /haha 對映到 FirstController#名字隨意(),呼叫該方法
  4. FirstController#名字隨意() 處理請求
  5. FirstController#名字隨意() 返回邏輯檢視名稱 first 給檢視解析器
  6. 檢視解析器找到 /WEB-INF/templates/first.thymeleaf檔案,並進行解析,生成檢視解析物件返回給前端控制器DispatcherServlet
  7. 前端控制器DispatcherServlet響應結果到瀏覽器。

4. 第一個 Spring MVC 程式最佳化:

4.1 在web.xml 配置檔案中 ,手動自定 spring mvc 的配置檔案

Spring MVC 中的配置檔案,名字是可以指定的,位置也是可以指定的,怎麼指定?
設定 DispatcherServlet 的初始化引數


<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        透過 Servlet 的初始化引數來指定Spring MVC 配置檔案的名字和位置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            指定Spring MVC 配置檔案的名字是:springmvc.xml-->
<!--            指定了Spring MVC 檔案存放的路徑是:類的根路徑 classpath-->
<!--            這裡爆紅是:idea的誤報-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>

建議: 在 web 伺服器啟動的時候,初始化 DispatcherServlet,這樣使用者第一次請求時,效率較高。體驗好

重點:SpringMVC 配置檔案的名字和路徑是可以手動設定的,如下:

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        透過 Servlet 的初始化引數來指定Spring MVC 配置檔案的名字和位置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            指定Spring MVC 配置檔案的名字是:springmvc.xml-->
<!--            指定了Spring MVC 檔案存放的路徑是:類的根路徑 classpath-->

            <param-value>classpath:springmvc.xml</param-value>
        </init-param>

<!--        在 web 伺服器啟動的時候,就初始化 DispatcherServlet-->
<!--        這是最佳化方式,可以提高使用者第一次傳送請求的體驗,第一次請求的效率較高-->
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

透過來設定SpringMVC配置檔案的路徑和名字。在DispatcherServlet的init方法執行時設定的。
1建議加上,這樣可以提高使用者第一次訪問的效率。表示在web伺服器啟動時初始化DispatcherServlet。

下面是 :springmvc.xml 的編寫:

在這裡插入圖片描述

4.2 配置 thymeleaf 翻譯為 html 的模板

這裡我們將 thymeleaf 檢視解析器的字尾改為:

WEB-INF目錄下新建templates目錄,在templates目錄中新建html檔案,例如:first.html,並提供以下程式碼:

在這裡插入圖片描述

在這裡插入圖片描述

對於每一個Thymeleaf檔案來說 xmlns:th="http://www.thymeleaf.org" 是必須要寫的,為了方便後續開發,可以將其新增到html模板檔案中:

img

4.3 編寫 IndexController 定義個“首頁”

在這裡插入圖片描述

package com.rainbowsea.springmvc.controller;


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

@Controller // 表示交給 Spring IOC 容器管理
public class IndexController {


    @RequestMapping("/")
    public String index() {
        return "index";
    }

}

表示請求路徑如果是:http://localhost:8080/springmvc/ ,則進入 /WEB-INF/templates/index.html 頁面。
這就是專案的首頁效果!!!!!

在這裡插入圖片描述

index.html 的編寫

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>
<h1>首頁</h1>

<a th:href="@{/first}"> first Spring mvc </a>
</body>
</html>

4.4 測試

部署到web伺服器,啟動web伺服器,開啟瀏覽器,在位址列上輸入:http://localhost:8080/springmvc/

在這裡插入圖片描述

5. 總結:

  1. 總之,與 Servelt 開發相比,Spring MVC 框架可以幫我們節省很多時間和精力,減少程式碼的複雜度,更加專注於業務開發。同時,也提供了更多的功能和擴充套件性,可以更好地滿足企業級應用的開發需求。

  2. servlet依賴(scope設定為 provided,表示這個依賴最終由第三方容器來提供)

  3. 注意:一般情況下,我們新增了webapp ,IDE是會自動給我們新增上一個小藍點的,如果沒有的話,需要我們自己手動新增。

  4. DispatcherServlet 是 Spring MVC 框架為我們提供的最核心 的類。它是整個 Spring MVC 框架的前端控制器。負責接收 HTTP 請求,將請求路由到處理程式,處理響應資訊,最終將響應返回給客戶端。DispatcherServlet 是 Web 應用程式的主要入口之一,

  5. 檢視解析器:檢視解析器(View Resolver) 的作用主要是將Controller 方法返回的邏輯檢視名稱解析成實際的檢視物件。檢視解析器將解析出的檢視物件返回給 DispatcherServlet,並最終由 DispatcherServlet 將該檢視物件轉化為響應結果,呈現給使用者

  6. 編寫FirsController ,在類上標註 @Controller 註解,納入IOC容器的管理,當然,也可以採用 @Component註解 進行標註, @Controller 只是 @Component 註解的別名

  7. Spring MVC 中的配置檔案,名字是可以指定的,位置也是可以指定的,怎麼指定?
    設定 DispatcherServlet 的初始化引數
          
    ```xml
          
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--        透過 Servlet 的初始化引數來指定Spring MVC 配置檔案的名字和位置-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
    <!--            指定Spring MVC 配置檔案的名字是:springmvc.xml-->
    <!--            指定了Spring MVC 檔案存放的路徑是:類的根路徑 classpath-->
    <!--            這裡爆紅是:idea的誤報-->
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
    ```
    建議: 在 web 伺服器啟動的時候,初始化 DispatcherServlet,這樣使用者第一次請求時,效率較高。體驗好
    

6. 最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裡插入圖片描述

相關文章