摘要:視圖解析框架同其它框架一樣,是請(qǐng)求驅(qū)動(dòng)的,圍繞中心設(shè)計(jì)的。中心會(huì)分配請(qǐng)求到各個(gè),以及提供其它功能。有個(gè)接口對(duì)于處理視圖來(lái)說(shuō)是很重要的,一個(gè)是,另一個(gè)是。如果屬性被設(shè)置為的話,就會(huì)觸發(fā)從中加載所有基類為的,然后存入列表。
Spring Web MVC 視圖解析
Spring web MVC 框架同其它web MVC 框架一樣,是請(qǐng)求驅(qū)動(dòng)的(request driven),圍繞中心Servlet設(shè)計(jì)的。中心Servlet會(huì)分配請(qǐng)求到各個(gè)Controllers,以及提供其它功能。Spring的DispatcherServlet就是這種中心Servlet,但做的更多。所有MVC框架都提供定位視圖(address views)的機(jī)制,Spring提供view resolvers,讓你能夠在瀏覽器上渲染models,而不會(huì)把你束縛在某一特定的視圖技術(shù)上。有2個(gè)接口(Interface)對(duì)于Spring處理視圖來(lái)說(shuō)是很重要的,一個(gè)是ViewResolver,另一個(gè)是View。 ViewResolver提供視圖名稱與實(shí)際視圖的映射關(guān)系,View接口定位請(qǐng)求準(zhǔn)備和請(qǐng)求處理到視圖技術(shù)上。Spring規(guī)定,Controller中的所有handler方法,必須解析到一個(gè)邏輯視圖,可以是顯式的(通過(guò)返回String、View或ModelView)或者是隱式的(基于協(xié)商 based on conventions)。在Spring中,視圖由邏輯視圖名稱定位,然后由一個(gè)view resolver解析。
Spring自帶的視圖解析器Spring自身帶有若干種view resolver,比如:AbstractCachingViewResolver、XmlViewResolver、ResourceBundleViewResolver、UrlBasedViewResolver、InternalResourceViewResolver、VelocityViewResolver、FreeMarkerViewResolver
、ContentNegotiatingViewResolver,你可以使用1種,或鏈?zhǔn)绞褂枚喾N。使用方法就是在你的*-Servlet.xml配置文件種加入相關(guān)的bean。舉例如下:
J2EE環(huán)境下視圖解析器的加載
那么,問(wèn)題是,Spring是如何從容器中感知到我們想要使用哪些ViewResoler的呢? 答案就在于DispatcherServlet類中的initViewResolvers方法。
DispatcherServlet.java中有一個(gè)私有方法,名為initViewResolvers,代碼片段如下,就是用來(lái)初始化所有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的話,就會(huì)觸發(fā)DispatcherServlet從ApplicationContext中加載所有基類為ViewResolver的Beans,然后存入viewResolvers列表。
(initViewResolvers會(huì)被確保在WebApplicationContext被初始化好了以后才會(huì)被調(diào)用的)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67914.html
摘要:概述本章開(kāi)始進(jìn)入另一重要的組件,即視圖組件,處理視圖組件使用兩個(gè)主要的接口是和。接口的作用是用于處理視圖進(jìn)行渲染。延用之前的介紹流程,本章分兩部分進(jìn)行闡述啟動(dòng)初始化和請(qǐng)求處理。 概述 本章開(kāi)始進(jìn)入另一重要的組件,即視圖組件,Spring MVC處理視圖組件使用兩個(gè)主要的接口是ViewResolver和View。根據(jù)名稱可知,ViewResolver即視圖解析器,其作用是把邏輯視圖名稱解...
摘要:概述本節(jié)學(xué)習(xí)下的功能,簡(jiǎn)單來(lái)說(shuō),該類的作用就是把多個(gè)視圖解析器進(jìn)行組裝,內(nèi)部使用存儲(chǔ)配置使用的視圖解析器。總結(jié)本章介紹了類,根據(jù)測(cè)試,了解到屬性不影響中配置使用的視圖解析器順序。 概述 本節(jié)學(xué)習(xí)下ViewResolverComposite的功能,簡(jiǎn)單來(lái)說(shuō),該類的作用就是把多個(gè)ViewResolver視圖解析器進(jìn)行組裝,內(nèi)部使用list存儲(chǔ)配置使用的視圖解析器。 本系列文章是基于Spri...
摘要:在中,就是前端控制器的任務(wù)是將請(qǐng)求發(fā)送給控制器。處理器映射會(huì)根據(jù)請(qǐng)求所攜帶的信息來(lái)進(jìn)行決策一旦選擇了合適的控制器,會(huì)將請(qǐng)求發(fā)送給選中的控制器。這些信息被稱為模型。因此無(wú)需在配置類中顯式聲明任何的控制器具體來(lái)講是試圖解析器。 Spring MVC基于模型-視圖-控制器(Model-View-Controller,MVC)模式實(shí)現(xiàn),能夠構(gòu)建像Spring框架那樣靈活和松耦合的Web應(yīng)用程序...
摘要:與一樣,該類繼承抽象類,并且通過(guò)外部的屬性文件定義邏輯視圖名稱與真正的視圖對(duì)象的關(guān)系,屬性文件默認(rèn)是下的,可以通過(guò)或?qū)傩詠?lái)指定,該屬性指的是文件的基名稱,也就是說(shuō)以屬性值開(kāi)頭的屬性文件。 概述 本章再學(xué)習(xí)另外兩個(gè)ViewResolver,分別是XmlViewResolver和ResourceBundleViewResolver,從功能上說(shuō),這兩個(gè)視圖解析器都是從外部資源文件中查找視圖V...
摘要:概述本章繼續(xù)學(xué)習(xí)另一個(gè)實(shí)現(xiàn)類解析器,該類的主要作用是根據(jù)同一請(qǐng)求的某些策略,選擇對(duì)應(yīng)的進(jìn)行渲染。可以把理解為適配器,對(duì)不同類型進(jìn)行適配。值得注意的是處理的為同一個(gè)。本系列文章是基于。實(shí)戰(zhàn)需求目標(biāo)實(shí)現(xiàn)后綴名或參數(shù)控制,顯示不同的視圖。 概述 本章繼續(xù)學(xué)習(xí)ViewResolver另一個(gè)實(shí)現(xiàn)類ContentNegotiatingViewResolver解析器,該類的主要作用是根據(jù)同一請(qǐng)求的某...
閱讀 1274·2021-11-24 09:39
閱讀 1530·2021-09-07 09:59
閱讀 3488·2019-08-30 15:54
閱讀 2483·2019-08-30 11:00
閱讀 2675·2019-08-29 15:06
閱讀 2166·2019-08-26 13:52
閱讀 437·2019-08-26 13:24
閱讀 2501·2019-08-26 12:20