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 開發有什麼區別?
- 入口控制:Srping MVC 框架透過 DispatcherServlet 作為 入口控制器,負責接收請求和分發請求。而在 Servlet 開發中,需要自己編寫 Servlet 程式,並在
web.xml
進行配置,才能接受和處理請求。 - 在 Spring MVC 中,表單提交時,可以自動將表單資料繫結到相應的 Java Bean 物件中,只需要在控制器方法的引數列表中宣告該JavaBean物件即可,無需手動獲取和賦值表單資料。而在純粹的 Servlet 開發中,這些都是需要自己手動完成的。
- IOC容器:SpringMVC 框架透過IOC容器管理物件,只需要在配置檔案中進行相應的配置即可,獲取例項物件,而在 Servelt 開發中需要手動建立物件例項。
- 統一處理請求:Spring MVC 框架提供了攔截器,異常處理器等統一處理請求的機制,並且可以靈活地配置這些處理器。而在 Servelt 開發中,需要自動編寫過濾器,異常處理器等,增加了程式碼的複雜度和開發難度。
- 檢視解析:Spring MVC 框架提供了多種檢視模組,如:JSP,Freemarker,Velocity等,並且支援國際化,主題等特性。而在Servlet開發中需要手動處理檢視層,增加了程式碼的複雜度。
總之,與 Servelt 開發相比,Spring MVC 框架可以幫我們節省很多時間和精力,減少程式碼的複雜度,更加專注於業務開發。同時,也提供了更多的功能和擴充套件性,可以更好地滿足企業級應用的開發需求。
3. 執行配置第一個 Spring MVC 程式
3.1 第一步:建立Maven模組
第一步:建立Empty Project,起名:springmvc。
第二步:設定springmvc工程的JDK版本:Java21。
第三步:設定maven。
第四步:建立Maven模組
第五步:將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 目錄下才行。
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 應用程式的主要入口之一,它的職責包括:
- 接收客戶端的 HTTP 請求:DispatcherServlet 監聽來自 Web 瀏覽器的 HTTP 請求,然後根據請求的 URL 將請求資料解析為 Request 物件。
- 處理請求的 URL:DispatcherServlet 將請求的URL(Uniform Resource Locator)與處理程式進行匹配,確定要呼叫哪個控制器(Controller) 來處理此請求。
- 呼叫相應的控制器:DispatcherServlet 將請求傳送給找到的控制器處理,控制器將執行業務邏輯,然後返回一個模型物件(Model)
- 渲染檢視:DispatcherServlet 將呼叫檢視物件引擎,將模型物件呈現為使用者可以檢視的 HTML 頁面。
- 返回響應給客戶端: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
配置檔案當中,配置如下兩項資訊:
第一項:元件掃描,Spring 掃描這個包中的類,將這個包中的類例項化並納入IOC容器當中進行管理。
第二項:檢視解析器:檢視解析器(View Resolver) 的作用主要是將Controller 方法返回的邏輯檢視名稱解析成實際的檢視物件。檢視解析器將解析出的檢視物件返回給 DispatcherServlet,並最終由 DispatcherServlet 將該檢視物件轉化為響應結果,呈現給使用者。
注意:如果採用了其它檢視,請配置對應的檢視解析器,例如:
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伺服器
第三步:啟動Tomcat伺服器。如果在控制檯輸出的資訊有中文亂碼,請修改tomcat伺服器配置檔案:apache-tomcat-10.1.19\conf\logging.properties
第四步:開啟瀏覽器,在瀏覽器位址列上輸入地址:http://localhost:8080/springmvc/test
3.9 執行流程總結:
- 瀏覽器傳送請求:http://localhost:8080/springmvc/haha
- SpringMVC的前端控制器DispatcherServlet接收到請求
- DispatcherServlet根據請求路徑 /haha 對映到 FirstController#名字隨意(),呼叫該方法
- FirstController#名字隨意() 處理請求
- FirstController#名字隨意() 返回邏輯檢視名稱 first 給檢視解析器
- 檢視解析器找到 /WEB-INF/templates/first.thymeleaf檔案,並進行解析,生成檢視解析物件返回給前端控制器DispatcherServlet
- 前端控制器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模板檔案中:
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. 總結:
總之,與 Servelt 開發相比,Spring MVC 框架可以幫我們節省很多時間和精力,減少程式碼的複雜度,更加專注於業務開發。同時,也提供了更多的功能和擴充套件性,可以更好地滿足企業級應用的開發需求。
servlet依賴(scope設定為 provided,表示這個依賴最終由第三方容器來提供)
注意:一般情況下,我們新增了webapp ,IDE是會自動給我們新增上一個小藍點的,如果沒有的話,需要我們自己手動新增。
DispatcherServlet 是 Spring MVC 框架為我們提供的最核心 的類。它是整個 Spring MVC 框架的前端控制器。負責接收 HTTP 請求,將請求路由到處理程式,處理響應資訊,最終將響應返回給客戶端。DispatcherServlet 是 Web 應用程式的主要入口之一,
檢視解析器:檢視解析器(View Resolver) 的作用主要是將Controller 方法返回的邏輯檢視名稱解析成實際的檢視物件。檢視解析器將解析出的檢視物件返回給 DispatcherServlet,並最終由 DispatcherServlet 將該檢視物件轉化為響應結果,呈現給使用者
編寫FirsController ,在類上標註 @Controller 註解,納入IOC容器的管理,當然,也可以採用 @Component註解 進行標註, @Controller 只是 @Component 註解的別名
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. 最後:
“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”