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