成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

spring是如何加載可用的ViewResolver的?

yagami / 3229人閱讀

摘要:視圖解析框架同其它框架一樣,是請求驅(qū)動的,圍繞中心設(shè)計的。中心會分配請求到各個,以及提供其它功能。有個接口對于處理視圖來說是很重要的,一個是,另一個是。如果屬性被設(shè)置為的話,就會觸發(fā)從中加載所有基類為的,然后存入列表。

Spring Web MVC 視圖解析

Spring web MVC 框架同其它web MVC 框架一樣,是請求驅(qū)動的(request driven),圍繞中心Servlet設(shè)計的。中心Servlet會分配請求到各個Controllers,以及提供其它功能。Spring的DispatcherServlet就是這種中心Servlet,但做的更多。所有MVC框架都提供定位視圖(address views)的機制,Spring提供view resolvers,讓你能夠在瀏覽器上渲染models,而不會把你束縛在某一特定的視圖技術(shù)上。有2個接口(Interface)對于Spring處理視圖來說是很重要的,一個是ViewResolver,另一個是View。 ViewResolver提供視圖名稱與實際視圖的映射關(guān)系,View接口定位請求準備和請求處理到視圖技術(shù)上。Spring規(guī)定,Controller中的所有handler方法,必須解析到一個邏輯視圖,可以是顯式的(通過返回String、View或ModelView)或者是隱式的(基于協(xié)商 based on conventions)。在Spring中,視圖由邏輯視圖名稱定位,然后由一個view resolver解析。

Spring自帶的視圖解析器

Spring自身帶有若干種view resolver,比如:AbstractCachingViewResolver、XmlViewResolver、ResourceBundleViewResolver、UrlBasedViewResolver、InternalResourceViewResolver、VelocityViewResolver、FreeMarkerViewResolver
、ContentNegotiatingViewResolver,你可以使用1種,或鏈式使用多種。使用方法就是在你的*-Servlet.xml配置文件種加入相關(guān)的bean。舉例如下:


    
    
    


    
    
J2EE環(huán)境下視圖解析器的加載

那么,問題是,Spring是如何從容器中感知到我們想要使用哪些ViewResoler的呢? 答案就在于DispatcherServlet類中的initViewResolvers方法。

DispatcherServlet.java中有一個私有方法,名為initViewResolvers,代碼片段如下,就是用來初始化所有ViewResolvers的。

    /**
     * Initialize the ViewResolvers used by this class.
     * 

If no ViewResolver beans are defined in the BeanFactory for this * namespace, we default to InternalResourceViewResolver. */ private void initViewResolvers(ApplicationContext context) { this.viewResolvers = null; if (this.detectAllViewResolvers) { // Find all ViewResolvers in the ApplicationContext, including ancestor contexts. Map matchingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false); if (!matchingBeans.isEmpty()) { this.viewResolvers = new ArrayList(matchingBeans.values()); // We keep ViewResolvers in sorted order. OrderComparator.sort(this.viewResolvers); } } else { try { ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class); this.viewResolvers = Collections.singletonList(vr); } catch (NoSuchBeanDefinitionException ex) { // Ignore, we"ll add a default ViewResolver later. } } // Ensure we have at least one ViewResolver, by registering // a default ViewResolver if no other resolvers are found. if (this.viewResolvers == null) { this.viewResolvers = getDefaultStrategies(context, ViewResolver.class); if (logger.isDebugEnabled()) { logger.debug("No ViewResolvers found in servlet "" + getServletName() + "": using default"); } } }

如果detectAllViewResolvers屬性被設(shè)置為true的話,就會觸發(fā)DispatcherServlet從ApplicationContext中加載所有基類為ViewResolver的Beans,然后存入viewResolvers列表。
(initViewResolvers會被確保在WebApplicationContext被初始化好了以后才會被調(diào)用的)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/67914.html

相關(guān)文章

  • SpringMVC之源碼分析--ViewResolver(一)

    摘要:概述本章開始進入另一重要的組件,即視圖組件,處理視圖組件使用兩個主要的接口是和。接口的作用是用于處理視圖進行渲染。延用之前的介紹流程,本章分兩部分進行闡述啟動初始化和請求處理。 概述 本章開始進入另一重要的組件,即視圖組件,Spring MVC處理視圖組件使用兩個主要的接口是ViewResolver和View。根據(jù)名稱可知,ViewResolver即視圖解析器,其作用是把邏輯視圖名稱解...

    pf_miles 評論0 收藏0
  • SpringMVC之源碼分析--ViewResolver(三)

    摘要:概述本節(jié)學(xué)習(xí)下的功能,簡單來說,該類的作用就是把多個視圖解析器進行組裝,內(nèi)部使用存儲配置使用的視圖解析器??偨Y(jié)本章介紹了類,根據(jù)測試,了解到屬性不影響中配置使用的視圖解析器順序。 概述 本節(jié)學(xué)習(xí)下ViewResolverComposite的功能,簡單來說,該類的作用就是把多個ViewResolver視圖解析器進行組裝,內(nèi)部使用list存儲配置使用的視圖解析器。 本系列文章是基于Spri...

    fox_soyoung 評論0 收藏0
  • Spring MVC概念

    摘要:在中,就是前端控制器的任務(wù)是將請求發(fā)送給控制器。處理器映射會根據(jù)請求所攜帶的信息來進行決策一旦選擇了合適的控制器,會將請求發(fā)送給選中的控制器。這些信息被稱為模型。因此無需在配置類中顯式聲明任何的控制器具體來講是試圖解析器。 Spring MVC基于模型-視圖-控制器(Model-View-Controller,MVC)模式實現(xiàn),能夠構(gòu)建像Spring框架那樣靈活和松耦合的Web應(yīng)用程序...

    lindroid 評論0 收藏0
  • SpringMVC之源碼分析--ViewResolver(六)

    摘要:與一樣,該類繼承抽象類,并且通過外部的屬性文件定義邏輯視圖名稱與真正的視圖對象的關(guān)系,屬性文件默認是下的,可以通過或?qū)傩詠碇付?,該屬性指的是文件的基名稱,也就是說以屬性值開頭的屬性文件。 概述 本章再學(xué)習(xí)另外兩個ViewResolver,分別是XmlViewResolver和ResourceBundleViewResolver,從功能上說,這兩個視圖解析器都是從外部資源文件中查找視圖V...

    alighters 評論0 收藏0
  • SpringMVC之源碼分析--ViewResolver(四)

    摘要:概述本章繼續(xù)學(xué)習(xí)另一個實現(xiàn)類解析器,該類的主要作用是根據(jù)同一請求的某些策略,選擇對應(yīng)的進行渲染??梢园牙斫鉃檫m配器,對不同類型進行適配。值得注意的是處理的為同一個。本系列文章是基于。實戰(zhàn)需求目標實現(xiàn)后綴名或參數(shù)控制,顯示不同的視圖。 概述 本章繼續(xù)學(xué)習(xí)ViewResolver另一個實現(xiàn)類ContentNegotiatingViewResolver解析器,該類的主要作用是根據(jù)同一請求的某...

    jcc 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<