視圖定位器ViewResolver

      在spring MVC中,當Controller將請求處理結果放入到ModelAndView中以後,DispatcherServlet會根據ModelAndView選擇合適的視圖進行渲染。那麼在Spring MVC中是如何選擇合適的View呢?View對象是是如何創建的呢?答案就在ViewResolver中,ViewResolver接口定義了resolverViewName方法,根據viewName創建合適類型的View實現。

    那麼,如何配置ViewResolver呢?在Spring中,ViewResolver作爲Spring Bean存在,可以在Spring配置文件中進行配置,例如下面的代碼,配置了jsp相關的viewResolver。    

  1. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  2.         <property name="prefix" value="/WEB-INF/views/"/>  
  3.         <property name="suffix" value=".jsp"/>  
  4.     </bean> 

    ViewResolver接口是在DispatcherServlet中進行調用的,當DispatcherServlet調用完Controller後,會得到一個ModelAndView對象,然後DispatcherServlet會調用render方法進行視圖渲染。

    在這裏需要關於ViewResolver的選擇是通過循環進行的,只選擇第一個符合要求的,因此在定義ViewResolver時,需要注意定義其優先級。

    下面就來着重關注一下ViewResolver的類結構。

               http://hi.csdn.net/attachment/201009/17/0_12847053098WtX.gif

       關於View對象的創建,不同的ViewResolver的解決方法是各部相同的。如BeanNameViewResolver是根據viewName選擇相應名稱的bean(這裏需要注意bean的scope,是否需要線程安全),而UrlBasedViewResolver則是使用反射機制,根據viewClass信息創建view對象,因此這個view不受IoC容器的管理。ContentNegotiationViewResolver中可以嵌套ViewResolver,根據不同的的請求類型選擇合適的ViewResolver。

       DispatcherServlet得到View對象後,即調用View的render方法,執行真正的渲染工作。

       最後,看一下View的類結構圖

           http://hi.csdn.net/attachment/201009/17/0_1284708927eRRZ.gif

      所有的We MVC框架都有一套它自己的解析視圖的機制,spring MVC也不例外,它使用ViewResolver進行視圖解析,讓用戶在瀏覽器中渲染模型。ViewResolver是一種開箱即用的技術,能夠解析JSP、Velocity模板和XSLT等多種視圖。


    Spring處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver接口在視圖名稱和真正的視圖之間提供映射; 而View接口則處理請求將真正的視圖呈現給用戶。


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