SpringMVC 框架(架構+ 處理流程 + 優勢 +註解)

(一)Spring MVC

           Spring MVC 是一個典型的MVC框架,是Spring內置的Web框架可以作爲應用項目的展示層,繼Spring 2.0對Spring

MVC進行重大升級後,Spring 2.5又爲Spring MVC引入了註解驅動功能,再到3.0時代,全面支持REST的網絡服務和更容易的網

絡編程Spring MVC 3.0)(最新Spring MVC 4.0

            Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面,Spring MVC 分離了控制器、模型對

象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定製,適用在我們的表現層到action模塊中,是MVC架構模式

中真正的Controller,在流程處理方面更加靈活,可以很容易的進行擴展,可以和Spring框架進行無縫集成

                

 

(二)SpringMVC 架構

          Spring Web MVC框架也是一個基於請求驅動的Web框架,並且也使用了前端控制器模式來進行設計,再根據請求映射規

則分發給相應的頁面控制器(動作/處理器)進行處理。首先讓我們整體看一下Spring Web MVC處理請求的流程:

        *  Spring Web MVC處理請求的流程

                    

           *  Spring Web MVC架構

                          

           (1)Spring MVC的核心是DispatcherServlet,當客戶端發送一個請求時,這個請求經過一系列過濾器處理,然後

DispatcherServlet會接收到這個請求;

           (2)DispatcherServlet會從HandlerMapping對象中查找與請求匹配的Controller,並將結果返回給

DispatcherServlet;

           (3)DispatcherServlet將請求轉發給目標Controller,如果定義有攔截器,則會經過這些攔截器處理;

           (4)標Controller處理完成業務邏輯後,會返回一個結果給DispatcherServlet;

           (5)DispatcherServlet根據結果查詢ViewResolver,找到與之對應的視圖對象,同樣將結果返回給

DispatcherServlet;

           (6)DispatcherServlet根據指定的顯示結果,調用模板對象渲染view;

           (7)將view返回給客戶端;

          根據上面的說明,可以很很明顯的看出,Spring MVC的核心是Servlet,並且創建的Controller其實也是一個Servlet

 

(三)SpringMVC 優勢

            1、清晰的角色劃分:前端控制器(DispatcherServlet)、請求到處理器映射(HandlerMapping)、處理器適配器

(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器(   Validator)、命令對

象(Command,請求參數綁定到的對象就叫命令對象)、表單對象(Form Object,提供給表單展示和提交到的對象就叫表單

對象);

         2、分工明確,而且擴展點相當靈活,可以很容易擴展,雖然幾乎不需要;

         3、由於命令對象就是一個POJO,無需繼承框架特定API,可以使用命令對象直接作爲業務對象;

         4、和Spring 其他框架無縫集成,是其它Web框架所不具備的;

         5、可適配,通過HandlerAdapter可以支持任意的類作爲處理器;

         6、可定製性,HandlerMapping、ViewResolver等能夠非常簡單的定製;

         7、功能強大的數據驗證、格式化、綁定機制;

         8、利用Spring提供的Mock對象能夠非常簡單的進行Web層單元測試;

         9、本地化、主題的解析的支持,使我們更容易進行國際化和主題的切換。

        10、強大的JSP標籤庫,使JSP編寫更容易;還有比如RESTful風格的支持、簡單的文件上傳、約定大於配置的契約式編程

支持、基於註解的零配置支持等等

 

(四)SpringMVC 註解(Controller與Requestmapping)

         @Controller  
         @RequestMapping("/helloworld")   
         public class Helloworld {   
            @RequestMapping(method=RequestMethod.GET)   
            public ModelAndView hello() {   
              ModelAndView mv = new ModelAndView();   
              mv.setViewName("helloworld");   
              return mv;   
            }   
          }  

      @Requestmapping的可選參數:

              (1)value:表示需要匹配的url的格式

              (2)method:表示所需處理請求的http 協議(如get,post,put,delete等),可選值爲RequestMethod這個enum的值。

              (3)params:格式爲”paramname=paramvalue” 或 “paramname!=paramvalue”。不帶參數則表示paramvalue可以爲

任意值。如params =  {"param1=1","param2!=2","param3"},表示對應的url必須包括param1,param2,param3三個參數,其中

param1的值必須爲1,param2的值不能爲2,param3的值可以爲任意值。

             (4)headers:用來限定對應的reqeust請求的headers中必須包括的內容,例如headers={"Connection=keep-alive"}, 表

示請求頭中的connection的值必須爲keep-alive

 

(五)SpringMVC 總結

       Spring mvc處理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void      

     (1)ModelAndView(模型視圖)

          通過ModelAndView構造方法可以指定返回的頁面名稱,也可以通過setViewName()方法跳轉到指定的頁面 , 使用

addObject()設置需要返回的值,addObject()有幾個不同參數的方法,可以默認和指定返回對象的名字。 調用addObject()方法

將值設置到一個名爲ModelMap的類屬性,ModelMap是LinkedHashMap的子類, 具體請看類

               @RequestMapping("show1")
               public ModelAndView show1(HttpServletRequest request,
                   HttpServletResponse response) throws Exception {
                       ModelAndView mav = new ModelAndView("/demo2show");
                       mav.addObject("account", "account -1");
                  return mav;
              }

    小結:

        1、使用 String 作爲請求處理方法的返回值類型是比較通用的方法,這樣返回的邏輯視圖名不會和請求 URL 綁定,具有很

大的靈活性,而模型數據又可以通過 ModelMap 控制。 

       2、使用void、map、Model 時,返回對應的邏輯視圖名稱真實url爲:prefix前綴+視圖名稱 +suffix後綴組成。 

       3、使用String、ModelAndView返回視圖名稱可以不受請求的url綁定,ModelAndView可以設置返回的視圖名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章