閱讀268 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Spring MVC學習指南(第2版)》——2.2 模型2介紹

本節書摘來自異步社區《Spring MVC學習指南(第2版)》一書中的第2章,第2.2節,作者:【美】Paul Deck著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

2.2 模型2介紹

模型2基於模型—視圖—控製器(MVC)模式,該模式是Smalltalk-80用戶交互的核心概念,那時還沒有設計模式的說法,當時稱為MVC範式。

一個實現MVC模式的應用包含模型、視圖和控製器3個模塊。視圖負責應用的展示。模型封裝了應用的數據和業務邏輯。控製器負責接收用戶輸入,改變模型以及調整視圖的顯示。

模型2中,Servlet或者Filter都可以充當控製器。幾乎所有現代Web框架都是模型2的實現。Struts 1、Spring MVC和JavaServer Faces使用一個Servlet作為控製器,而Struts 2則使用一個Filter作為控製器。大部分都采用JSP頁麵作為應用的視圖,當然也有其他技術。而模型則采用POJO(Plain Old Java Object)。不同於EJB等特定對象,POJO是一個普通對象。實踐中會采用一個JavaBean來持有模型狀態,並將業務邏輯放到一個Action類中。

圖2.1展示了一個模型2應用的架構圖。

screenshot

圖2.1 模型2架構圖

每個HTTP請求都發送給控製器,請求中的URI標識出對應的action。action代表了應用可以執行的一個操作。一個提供了action的Java對象稱為action對象。一個action類可以支持多個action(在Spring MVC以及Struts 2中),或者一個action(在Struts 1中)。

看似簡單的操作可能需要多個action。如向數據庫添加一個產品,需要兩個action。

(1)顯示一個“添加產品”的表單,以便用戶能輸入產品信息。

(2)將表單信息保存到數據庫中。

如前所述,我們需要通過URI方式告訴控製器執行相應的action。例如,通過發送類似如下的URI,來顯示“添加產品”表單。

https://domain/appName/input-product
通過類似如下的URI,來保存產品。

https://domain/appName/save-product
控製器會解析URI並調用相應的action,然後將模型對象放到視圖可以訪問的區域(以便服務端數據可以展示在瀏覽器上)。最後,控製器利用RequestDispatcher或者HttpServlet Response.sendRedirect()方法跳轉到視圖(JSP頁麵或者其他資源)。在JSP頁麵中,用表達式語言以及定製標簽顯示數據。

注意
 

調用RequestDispatcher.forward方法或者HttpServletResponse.sendRedirect()方法並不會停止執行剩餘的代碼。因此,若forward方法不是最後一行代碼,則應顯式地返回。

if (action.equals(...)) {
  RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl); 
  rd.forward(request, response);
  return;//explicitly return. Or else, the code below will be executed 
}
// do something else

大多數時候,你將使用RequestDispatcher轉發到視圖,因為它比sendRedirect更快響應。 這是因為重定向導致服務器向瀏覽器發送狀態代碼為302的HTTP響應,並包含新URL。 而瀏覽器在接收到狀態代碼302時,根據響應頭部中找到的URL向服務器發出新的HTTP請求。 換句話說,重定向需要一個往返,這使其慢於轉發。

使用重定向超過轉發的優勢是什麼? 通過重定向,你可以將瀏覽器定向到其他應用程序,這是轉發不能支持的。如果重定向用於在同一應用程序中不同的資源,由於使用與原始請求URL不同的URL,若用戶在響應後意外地按下瀏覽器的重新加載/刷新按鈕,則與原始請求URL相關聯的代碼將不會再次執行。例如,你不希望因為用戶意外按下她的瀏覽器的重新加載或刷新按鈕,而導致重新執行諸如信用卡付款的代碼。

本章最後一個例子是appdesign4應用程序,它顯示了一個重定向的例子。

最後更新:2017-05-27 12:01:31

  上一篇:go  《Spring MVC學習指南(第2版)》——2.3 模型2之Servlet控製器
  下一篇:go  《Spring MVC學習指南(第2版)》——第2章 模型2和MVC模式 2.1模型1介紹