5分鐘帶你了解Spring Web MVC框架(趕緊上車)

Spring Web MVC框架提供了模型 - 視圖 - 控制器(MVC)體系結構和可用於開發靈活和鬆散耦合的Web應用程序的組件。 MVC模式導致分離應用程序的不同方面(輸入邏輯,業務邏輯和UI邏輯),同時提供這些元素之間的鬆散耦合。


·該模型封裝了應用程序數據,通常它們將由POJO組成。

·View負責渲染模型數據,通常它會生成客戶端瀏覽器可以解釋的HTML輸出。

·Controller負責處理用戶請求並構建適當的模型並將其傳遞給視圖進行渲染。

DispatcherServlet

Spring Web模型 - 視圖 - 控制器(MVC)框架是圍繞DispatcherServlet設計的,它處理所有HTTP請求和響應。 Spring Web MVC DispatcherServlet的請求處理工作流程如下圖所示 :

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

以下是與傳入的DispatcherServlet HTTP請求相對應的事件序列 :

·在接收到HTTP請求後, DispatcherServlet會查詢HandlerMapping以調用相應的Controller。

·Controller接受請求並根據使用的GET或POST方法調用方法。方法將根據定義的業務邏輯設置模型數據,並將視圖名稱返回給DispatcherServlet。

·DispatcherServlet將從ViewResolver獲取幫助以獲取請求的已定義視圖。

·View完成後, DispatcherServlet將模型數據傳遞給最終在瀏覽器中呈現的視圖。

上述所有組件,即HandlerMapping,Controller和ViewResolver都是WebApplicationContext的一部分,它是普通ApplicationContext的擴展,並帶有Web應用程序所需的一些額外功能。

所需的配置

您需要映射您希望DispatcherServlet處理的請求,方法是使用web.xml文件中的URL映射。以下是顯示HelloWeb DispatcherServlet示例的聲明和映射的示例:

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

web.xml文件將保存在Web應用程序的WebContent / WEB-INF目錄中。 在初始化HelloWeb DispatcherServlet時,框架將嘗試從位於應用程序的WebContent / WEB-INF目錄中的名為[servlet-name] -servlet.xml的文件加載應用程序上下文。 在這種情況下,我們的文件將是HelloWebservlet.xml。

接下來,標籤指示哪些URL將由哪個DispatcherServlet處理。 這裡所有以.jsp結尾的HTTP請求都將由HelloWeb DispatcherServlet處理。

如果您不想使用缺省文件名作為[servlet-name] -servlet.xml和缺省位置為WebContent / WEB-INF,則可以通過在web.xml文件中添加servlet偵聽器ContextLoaderListener來自定義此文件名和位置 如下:

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

現在,讓我們檢查HelloWeb-servlet.xml文件的必需配置,該文件放置在Web應用程序的WebContent / WEB-INF目錄中:

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

以下是關於HelloWeb-servlet.xml文件的要點:

·[servlet-name] -servlet.xml文件將用於創建定義的bean,覆蓋全局範圍中定義的具有相同名稱的任何bean的定義。

·標記將用於激活Spring MVC註釋掃描功能,該功能允許使用@Controller和@RequestMapping等註釋。

·InternalResourceViewResolver將定義規則來解析視圖名稱。 按照上面定義的規則,名為hello的邏輯視圖被委託給位於/WEB-INF/jsp/hello.jsp的視圖實現。

以下部分將向您展示如何創建您的實際組件,即Controller(控制器),Model(模型)和View(視圖)。

定義一個Controller

DispatcherServlet將請求委託給控制器以執行特定於其的功能。 @Controller註釋表示特定的類用作控制器的角色。 @RequestMapping註釋用於將URL映射到整個類或特定的處理程序方法。

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

@Controller批註將類定義為Spring MVC控制器。 在這裡,@RequestMapping的第一次使用表明這個控制器上的所有處理方法都是相對於/ hello路徑的。 下一個註釋@RequestMapping(method = RequestMethod.GET)用於聲明printHello()方法作為處理HTTP GET請求的控制器的默認服務方法。 您可以定義另一種方法來處理同一個URL上的任何POST請求

您可以使用另一種形式編寫上述控制器,您可以在@RequestMapping中添加其他屬性,如下所示:

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

值屬性指示處理程序方法映射到的URL,方法屬性定義處理HTTP GET請求的服務方法。 關於上面定義的控制器,需要注意以下幾點:

·您可以在方法中定義所需的業務邏輯。 您可以根據需要調用此方法中的另一個方法。

·根據定義的業務邏輯,您將在此方法內創建一個模型。 您可以使用setter不同的模型屬性,這些屬性將被視圖訪問以呈現最終結果。 本示例創建一個模型,其屬性為“信息”。

·定義的方法可以返回一個String,其中包含要用於呈現模型的視圖的名稱。 本例返回“hello”作為邏輯視圖名稱。

創建JSP視圖

Spring MVC技術支持多種類型的視圖軟件。 包括:JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom和RSS源,JasperReports等等,但最常見的是 JSTL和JSP模板。

讓我們在/WEB-INF/hello/hello.jsp中編寫一個簡單的hello視圖:

5分鐘帶你瞭解Spring Web MVC框架(趕緊上車)

這裡$ {message}是我們在Controller中設置的屬性。 您可以在視圖中顯示多個屬性。


分享到:


相關文章: