Spring MVC框架

在Spring的Web MVC框架提供了模型 - 視圖 - 控制器架構以及可用於開發靈活,鬆散耦合的Web應用程序準備的組件。

MVC模式會導致分離的應用程序(輸入邏輯,業務邏輯和UI邏輯)的不同方面,同時提供這些元素之間的鬆耦合。

  • 模型(Model )封裝了應用程序的數據和一般他們會組成的POJO。

  • 視圖(View)是負責呈現模型數據和一般它生成的HTML輸出,客戶端的瀏覽器能夠解釋

  • 控制器(Controller )負責處理用戶的請求,並建立適當的模型,並把它傳遞給視圖渲染

DispatcherServlet






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

Spring DispatcherServlet

下面是對應於傳入的HTTP請求到DispatcherServlet的事件序列:

  1. 接收HTTP請求後,DispatcherServlet 諮詢 HandlerMapping 來調用相應的控制器。

  2. 該控制器接受請求並調用基於使用GET或POST方法相應的服務方法。服務方法將基於定義的業務邏輯設置模型數據,並返回視圖名到DispatcherServlet。

  3. DispatcherServlet將需要幫助的ViewResolver從拾取到該請求所定義的視圖。

  4. 一旦視圖被敲定,DispatcherServlet會傳遞模型數據是在瀏覽器上最終呈現的視圖。








所有上述部件,即HandlerMapping,控制器和視圖解析器WebApplicationContext 部分是純的 ApplicationContext 必要的 Web應用程序的一些額外的功能擴展。

所需配置



你需要映射所需的DispatcherServlet處理,通過在web.xml文件中使用URL映射請求。下面是一個例子,說明聲明和映射 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 目錄。 在 DispatcherServlet 的 HelloWeb 初始化,該框架將嘗試從一個名爲 [servlet-name]-servlet.xml位於應用程序 WebContent/WEB-INF 目錄文件加載應用程序上下文。在這種情況下我們的文件將是HelloWeb-servlet.xml。

接下來,<servlet-mapping>標記指示URL會被DispatcherServlet處理。這裏全部用。jsp結束HTTP請求將由DispatcherServlet的HelloWeb處理。

如果不想用默認文件名爲[servlet-name]-servlet.xml和默認位置的WebContent/WEB-INF,可以通過添加servlet 的 listenerContextLoaderListener 在 web.xml 文件中定義該文件的名稱和位置如下:  

<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.yiibai" />

   <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將有定義來解析視圖名的規則。按照上述定義的規則,命名爲你好的邏輯視圖被委託給一個視圖實現位於/WEB-INF/jsp/hello.jsp。







下一節將學習如何創建實際組件IE瀏覽器。控制器,模型和視圖。

定義控制器



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(方法= 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訂閱,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 應用程序幾個重要的例子:

S.N. 實例& 描述
1 Spring MVC Hello World Example
這個例子將說明如何編寫一個簡單的Spring Web Hello World應用程序。
2 Spring MVC Form Handling Example
這個例子將說明如何使用HTML表單將數據提交到控制器和顯示回處理結果寫一個Spring Web應用程序。
3 Spring Page Redirection Example
瞭解如何在Spring MVC框架中使用頁面重定向功能。
4 Spring Static Pages Example
瞭解如何訪問靜態網頁與動態網頁在Spring MVC框架。
5 Spring Exception Handling Example
瞭解如何處理Spring MVC框架異常。

發佈了63 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章