
- Spring 核心基礎
- Spring - 首頁
- Spring - 概述
- Spring - 架構
- Spring - 環境搭建
- Spring - Hello World 示例
- Spring - IoC 容器
- Spring - Bean 定義
- Spring - Bean 作用域
- Spring - Bean 生命週期
- Spring - Bean 後置處理器
- Spring - Bean 定義繼承
- Spring - 依賴注入
- Spring - 注入內部 Bean
- Spring - 注入集合
- Spring - Bean 自動裝配
- 基於註解的配置
- Spring - 基於 Java 的配置
- Spring - Spring 中的事件處理
- Spring - Spring 中的自定義事件
- Spring - 使用 Spring 框架進行 AOP
- Spring - JDBC 框架
- Spring - 事務管理
- Spring - Web MVC 框架
- Spring - 使用 Log4J 進行日誌記錄
- Spring 問題與解答
- Spring - 問題與解答
- Spring 有用資源
- Spring - 快速指南
- Spring - 有用資源
- Spring - 討論
Spring - MVC 框架
Spring Web MVC 框架提供模型-檢視-控制器 (MVC) 架構和可用於開發靈活且松耦合 Web 應用程式的現成元件。MVC 模式導致分離應用程式的不同方面(輸入邏輯、業務邏輯和 UI 邏輯),同時提供這些元素之間的松耦合。
模型封裝應用程式資料,通常由 POJO 組成。
檢視負責呈現模型資料,通常生成客戶端瀏覽器可以解釋的 HTML 輸出。
控制器負責處理使用者請求並構建適當的模型,並將其傳遞給檢視進行呈現。
DispatcherServlet
Spring Web 模型-檢視-控制器 (MVC) 框架圍繞一個DispatcherServlet 設計,該DispatcherServlet 處理所有 HTTP 請求和響應。下圖說明了 Spring Web MVC DispatcherServlet 的請求處理工作流程:

以下是對應於傳入 HTTP 請求到DispatcherServlet 的事件序列:
在收到 HTTP 請求後,DispatcherServlet 會諮詢HandlerMapping 以呼叫相應的Controller。
Controller 獲取請求並根據使用的 GET 或 POST 方法呼叫相應的服務方法。服務方法將根據定義的業務邏輯設定模型資料,並將檢視名稱返回給DispatcherServlet。
DispatcherServlet 將藉助ViewResolver 獲取請求的定義檢視。
一旦檢視確定,DispatcherServlet 將模型資料傳遞給檢視,最終在瀏覽器上呈現。
所有上述元件,即 HandlerMapping、Controller 和 ViewResolver 都是WebApplicationContext 的一部分,WebApplicationContext 是普通ApplicationContext 的擴充套件,具有一些 Web 應用程式所需的其他功能。
所需配置
您需要使用web.xml 檔案中的 URL 對映來對映您希望DispatcherServlet 處理的請求。以下是一個顯示HelloWeb DispatcherServlet 示例的宣告和對映的示例:
<web-app id = "WebApp_ID" version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> </web-app>
web.xml 檔案將儲存在 Web 應用程式的 WebContent/WEB-INF 目錄中。在HelloWeb DispatcherServlet 初始化時,框架將嘗試從應用程式 WebContent/WEB-INF 目錄中名為[servlet-name]-servlet.xml 的檔案中載入應用程式上下文。在本例中,我們的檔案將為HelloWebservlet.xml。
接下來,<servlet-mapping> 標籤指示哪些 URL 將由哪個 DispatcherServlet 處理。此處,所有以.jsp 結尾的 HTTP 請求都將由HelloWeb DispatcherServlet 處理。
如果您不想使用[servlet-name]-servlet.xml 作為預設檔名,也不想使用WebContent/WEB-INF 作為預設位置,您可以透過在 web.xml 檔案中新增 servlet 監聽器ContextLoaderListener 來自定義此檔名和位置,如下所示:
<web-app...> <!-------- DispatcherServlet definition goes here-----> .... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
現在,讓我們檢查HelloWeb-servlet.xml 檔案所需的配置,該檔案位於您的 Web 應用程式的WebContent/WEB-INF 目錄中:
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package = "com.tutorialspoint" /> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value = "/WEB-INF/jsp/" /> <property name = "suffix" value = ".jsp" /> </bean> </beans>
以下是關於HelloWeb-servlet.xml 檔案的重要說明:
[servlet-name]-servlet.xml 檔案將用於建立定義的 bean,覆蓋全域性範圍內任何具有相同名稱的 bean 的定義。
<context:component-scan...> 標籤將用於啟用 Spring MVC 註解掃描功能,該功能允許使用 @Controller 和 @RequestMapping 等註解。
InternalResourceViewResolver 將定義用於解析檢視名稱的規則。根據上述定義的規則,名為hello 的邏輯檢視將委託給位於/WEB-INF/jsp/hello.jsp 的檢視實現。
以下部分將向您展示如何建立實際元件,即控制器、模型和檢視。
定義控制器
DispatcherServlet 將請求委託給控制器以執行特定於它的功能。@Controller 註解表示特定類充當控制器的角色。@RequestMapping 註解用於將 URL 對映到整個類或特定處理程式方法。
@Controller @RequestMapping("/hello") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
@Controller 註解將類定義為 Spring MVC 控制器。這裡,@RequestMapping 的第一次使用表示此控制器上的所有處理方法都相對於/hello 路徑。下一個註解@RequestMapping(method = RequestMethod.GET) 用於將 printHello() 方法宣告為控制器的預設服務方法,以處理 HTTP GET 請求。您可以在同一 URL 上定義另一個方法來處理任何 POST 請求。
您可以以另一種形式編寫上述控制器,您可以在其中新增其他屬性到@RequestMapping 中,如下所示:
@Controller public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
value 屬性指示處理程式方法對映到的 URL,method 屬性定義服務方法以處理 HTTP GET 請求。關於上面定義的控制器的以下要點需要注意:
您將在服務方法中定義所需的業務邏輯。您可以根據需要在此方法內呼叫另一個方法。
根據定義的業務邏輯,您將在此方法中建立模型。您可以使用 setter 設定不同的模型屬性,這些屬性將被檢視訪問以呈現最終結果。此示例使用其屬性“message”建立模型。
定義的服務方法可以返回一個字串,其中包含要用於呈現模型的檢視的名稱。此示例返回“hello”作為邏輯檢視名稱。
建立 JSP 檢視
Spring MVC 支援針對不同表示技術的多種型別的檢視。這些包括 - JSP、HTML、PDF、Excel 工作表、XML、Velocity 模板、XSLT、JSON、Atom 和 RSS 提要、JasperReports 等。但最常見的是我們使用用 JSTL 編寫的 JSP 模板。
讓我們在 /WEB-INF/hello/hello.jsp 中編寫一個簡單的hello 檢視:
<html> <head> <title>Hello Spring MVC</title> </head> <body> <h2>${message}</h2> </body> </html>
這裡${message} 是我們在控制器內部設定的屬性。您可以有多個屬性在您的檢視中顯示。
Spring Web MVC 框架示例
基於上述概念,讓我們檢查一些重要的示例,這些示例將幫助您構建 Spring Web 應用程式:
序號 | 示例及描述 |
---|---|
1 | Spring MVC Hello World 示例
此示例將解釋如何編寫簡單的 Spring Web Hello World 應用程式。 |
2 | Spring MVC 表單處理示例
此示例將解釋如何使用 HTML 表單編寫 Spring Web 應用程式,以將資料提交到控制器並顯示處理後的結果。 |
3 | Spring 頁面重定向示例
瞭解如何在 Spring MVC 框架中使用頁面重定向功能。 |
4 | Spring 靜態頁面示例
瞭解如何在 Spring MVC 框架中訪問靜態頁面以及動態頁面。 |
5 | Spring 異常處理示例
瞭解如何在 Spring MVC 框架中處理異常。 |