?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
Portlet MVC是一個(gè)請(qǐng)求驅(qū)動(dòng)的Web MVC框架,它圍繞著Portlet設(shè)計(jì),把請(qǐng)求
轉(zhuǎn)發(fā)給控制器,提供了便利的Porltet應(yīng)用開(kāi)發(fā)功能。而且,Spring的
DispatcherPortlet
功能遠(yuǎn)遠(yuǎn)不止這些,它和Spring
ApplicationContext
完全集成,使得開(kāi)發(fā)人員
能夠使用Spring其它部分的每個(gè)功能。
DispatcherPortlet
和一般的Portlet一樣,
在Web應(yīng)用的portlet.xml
中聲明:
<portlet> <portlet-name>sample</portlet-name> <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <portlet-info> <title>Sample Portlet</title> </portlet-info> </portlet>
現(xiàn)在需要配置DispatcherPortlet
。
在Portlet MVC框架里,每個(gè)DispatcherPortlet
都有自己的
WebApplicationContext
,它接管了所有在根
WebApplicationContext
定義的Bean。我們可以
在Portlet作用范圍內(nèi)對(duì)這些Bean進(jìn)行重載,重載后的Bean可以定義成對(duì)于特定的Portlet實(shí)例可見(jiàn)。
在初始化
DispatcherPortlet
時(shí),框架會(huì)在Web應(yīng)用的WEB-INF
目錄下尋找[portlet-name]-portlet.xml
,生成在其中定義的Bean(會(huì)覆蓋在全局范圍里名字相同的Bean的定義)。
DispatcherPortlet
用到的配置文件位置
可以通過(guò)Portlet初始化參數(shù)來(lái)修改(下面有詳細(xì)的描述)。
Spring的DispatcherPortlet
會(huì)用一些特殊的Bean
來(lái)處理請(qǐng)求和顯示視圖。這些Spring包含的Bean和其它的Bean一樣,可以在
WebApplicationContext
里進(jìn)行配置。每
個(gè)Bean下面都會(huì)有詳細(xì)的描述。這里,只是讓你知道它們,
我們繼續(xù)討論DispatcherPortlet
。大多數(shù)的Bean都有缺省配置,所以不需要擔(dān)心它們的配置。
表?16.1.?WebApplicationContext
中特殊的Bean
名詞 | 解釋 |
---|---|
處理器映射 | (第?16.5?節(jié) “處理器映射”) 一個(gè)前置和后置的處理器以及控制器的列表,這些控制器 通過(guò)匹配特定的條件(比如,由控制器指定的Portlet模式), 從而得到執(zhí)行。 |
控制器 | (第?16.4?節(jié) “控制器”)是MVC的一員, 是提供(或至少可以訪問(wèn))具體功能的Bean |
視圖解析器 | (第?16.6?節(jié) “視圖和它們的解析”) 能夠?qū)? 視圖名字對(duì)應(yīng)到視圖定義。 |
分段(multipart)解析器 | (第?16.7?節(jié) “Multipart文件上傳支持”) 能夠處理 從HTML表單上傳的文件 |
處理器異常解析器 | (第?16.8?節(jié) “異常處理”) 能夠?qū)惓?duì)應(yīng)到視圖,或?qū)崿F(xiàn)某種復(fù)雜的異常處理代碼 |
在DispatcherPortlet
配置好后,請(qǐng)求進(jìn)入到特定
DispatcherPortlet
時(shí),它開(kāi)始處理。下面描述了
DispatcherPortlet
處理請(qǐng)求的完整過(guò)程:
PortletRequest.getLocale()
返回
的Locale綁定在請(qǐng)求上,這使得在處理請(qǐng)求時(shí)(如顯示視圖、準(zhǔn)備數(shù)據(jù)等),
代碼能夠使用Locale。
如果在ActionRequest
里
指定了分段解析器,框架會(huì)在請(qǐng)求里尋找分段,如果找到了,
會(huì)把它們包裝在MultipartActionRequest
里,供在后續(xù)處理中使用。(關(guān)于分段處理的進(jìn)一步信息見(jiàn)第?16.7?節(jié) “Multipart文件上傳支持”)。
尋找合適的處理器。如果找到了,這個(gè)處理器關(guān)聯(lián)的執(zhí)行鏈 (前置處理器、后置處理器和控制器)會(huì)被按序執(zhí)行來(lái)準(zhǔn)備模型。
如果有模型返回,視圖通過(guò)視圖解析器進(jìn)行顯示,視圖解析器是在
WebApplicationContext
配置好的。如果沒(méi)有模型
返回(可能由于預(yù)處理器或后處理器攔截了請(qǐng)求,比如安全原因),就不會(huì)有視圖顯示
因?yàn)橛锌赡苷?qǐng)求已經(jīng)被處理了。
在WebApplicationContext
里
定義的異常處理解析器能夠捕獲在處理請(qǐng)求時(shí)可能拋出的異常,借助這些解析器,
我們可以對(duì)在捕獲特定異常時(shí)的操作進(jìn)行自定義。
通過(guò)在portlet.xml
文件里增加Context參數(shù)或者Portlet
初始化參數(shù),可以對(duì)Spring的DispatcherPortlet
進(jìn)行自定義。
下面列出了幾種可能。
表?16.2.?DispatcherPortlet
的初始化參數(shù)
參數(shù) | 解釋 |
---|---|
contextClass |
實(shí)現(xiàn)WebApplicationContext
的類,在Portlet初始化時(shí)用它初始化context。如果沒(méi)有指定這個(gè)
參數(shù),會(huì)使用XmlPortletApplicationContext 。 |
contextConfigLocation |
傳給context實(shí)例(由contextClass 指定)
的字符串,指明context的位置。它可以(以逗號(hào))分隔為多個(gè)字符串來(lái)
支持多個(gè)context(在定義過(guò)兩次的bean有多個(gè)context位置時(shí),
最后的位置起作用)。 |
namespace |
WebApplicationContext
的命名空間,缺省是[portlet-name]-portlet 。 |
viewRendererUrl |
ViewRendererServlet 的URL,
DispatcherPortlet 可以訪問(wèn)。
(見(jiàn) 第?16.3?節(jié) “ViewRendererServlet ”)。 |