- Spring MVC基礎
- Spring MVC - 首頁
- Spring MVC - 概述
- Spring MVC - 環境搭建
- Spring MVC - HelloWorld示例
- Spring MVC - 表單處理
- Spring MVC - 表單處理
- Spring MVC - 頁面重定向
- Spring MVC - 靜態頁面
- Spring MVC - 表單標籤庫
- Spring MVC - 文字框
- Spring MVC - 密碼框
- Spring MVC - 文字區域
- Spring MVC - 複選框(單選)
- Spring MVC - 複選框(多選)
- Spring MVC - 單選按鈕(單選)
- Spring MVC - 單選按鈕(多選)
- Spring MVC - 下拉列表
- Spring MVC - 列表框
- Spring MVC - 隱藏域
- Spring MVC - 錯誤處理
- Spring MVC - 檔案上傳
- Spring MVC - 處理器對映
- Bean名稱URL處理器對映
- 控制器類名處理器對映
- 簡單URL處理器對映
- Spring MVC - 控制器
- Spring MVC - 多動作控制器
- 屬性方法名解析器
- 引數方法名解析器
- 可引數化檢視控制器
- Spring MVC - 檢視解析器
- 內部資源檢視解析器
- Spring MVC - XML檢視解析器
- 資源包檢視解析器
- 多個解析器對映
- Spring MVC - 整合
- Spring MVC - Hibernate驗證器
- Spring MVC - 生成RSS Feed
- Spring MVC - 生成XML
- Spring MVC - 生成JSON
- Spring MVC - 生成Excel
- Spring MVC - 生成PDF
- Spring MVC - 使用log4j
- Spring 常見問題解答
- Spring - 常見問題解答
- Spring 有用資源
- Spring MVC - 快速指南
- Spring MVC - 有用資源
- Spring MVC - 討論
Spring - MVC框架概述
Spring Web MVC框架提供了一種模型-檢視-控制器架構和現成的元件,可用於開發靈活且鬆散耦合的Web應用程式。MVC模式導致分離應用程式的不同方面(輸入邏輯、業務邏輯和UI邏輯),同時提供這些元素之間的鬆散耦合。
模型封裝應用程式資料,通常由POJO組成。
檢視負責呈現模型資料,通常生成客戶端瀏覽器可以解釋的HTML輸出。
控制器負責處理使用者請求和構建相應的模型,並將其傳遞給檢視進行呈現。
DispatcherServlet
Spring Web模型-檢視-控制器(MVC)框架圍繞一個DispatcherServlet設計,該Servlet處理所有HTTP請求和響應。下圖顯示了Spring Web MVC DispatcherServlet的請求處理工作流程。
以下是對應於傳入DispatcherServlet的HTTP請求的事件序列:
接收到HTTP請求後,DispatcherServlet會查詢處理器對映來呼叫相應的控制器。
控制器接收請求,並根據使用的GET或POST方法呼叫相應的服務方法。服務方法將根據定義的業務邏輯設定模型資料,並將檢視名稱返回給DispatcherServlet。
DispatcherServlet將藉助檢視解析器來選擇請求的定義檢視。
一旦檢視確定,DispatcherServlet將模型資料傳遞給檢視,最終在瀏覽器上呈現。
所有上述元件,即處理器對映、控制器和檢視解析器,都是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的檔案載入應用程式上下文。在本例中,我們的檔案將是HelloWeb-servlet.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>
現在,讓我們檢查Web應用程式的WebContent/WEB-INF目錄中放置的HelloWeb-servlet.xml檔案的所需配置。
<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請求的服務方法。
以下是關於上面定義的控制器的幾個要點:
您將在服務方法中定義所需的業務邏輯。您可以根據需要在此方法中呼叫另一個方法。
根據定義的業務邏輯,您將在此方法中建立一個模型。您可以設定不同的模型屬性,這些屬性將由檢視訪問以呈現結果。此示例建立一個其屬性為“message”的模型。
定義的服務方法可以返回一個字串,其中包含要用於呈現模型的檢視的名稱。此示例返回“hello”作為邏輯檢視名稱。
建立JSP檢視
Spring MVC支援許多不同表示技術的檢視型別。這些包括 - JSP、HTML、PDF、Excel工作表、XML、Velocity模板、XSLT、JSON、Atom和RSS feed、JasperReports等。但是,最常見的是使用JSTL編寫的JSP模板。因此,讓我們在/WEB-INF/hello/hello.jsp中編寫一個簡單的hello檢視:
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
這裡的${message}是我們控制器中設定的屬性。您可以在檢視中顯示多個屬性。