?
This document uses PHP Chinese website manual Release
目錄
DispatcherPortlet
ViewRendererServlet
AbstractController
和 PortletContentGenerator
PortletWrappingController
PortletModeHandlerMapping
ParameterHandlerMapping
PortletModeParameterHandlerMapping
HandlerInterceptor
sHandlerInterceptorAdapter
ParameterMappingInterceptor
PortletMultipartResolver
Spring不僅支持傳統(tǒng)(基于Servlet)的Web開發(fā),也支持JSR-168 Portlet開發(fā)。 Portlet MVC框架盡可能多地采用Web MVC框架,使用相同的底層表現(xiàn)層抽象和整合技術(shù)。所以, 在繼續(xù)閱讀本章前,務(wù)必溫習第?13?章 Web MVC framework Web框架 和第?14?章 集成視圖技術(shù) 兩章。
請牢記,在Spring MVC中的概念和Spring Porlet MVC中的相同的同時,JSR-168 Portlet 獨特的工作流程造成了一些顯著的差異。
Porlet工作流程和Servlet的主要差異在于,Portlet的請求處理有兩個獨特 的階段:動作階段和顯示階段。動作階段會有“后臺”數(shù)據(jù)改變或動作的代碼,這些代碼 只會執(zhí)行一次。顯示階段會產(chǎn)生用戶每次刷新時的看到的顯示內(nèi)容。重要的是, 在單個請求的整個處理過程中,動作階段只會被執(zhí)行一次,而顯示階段可能會被執(zhí)行多次。 這就提供了(并且要求)在改變系統(tǒng)持久狀態(tài)的活動和產(chǎn)生顯示內(nèi)容的活動之間 有一個清晰的分層。
這種兩階段的請求處理是JSR-168規(guī)范的一個優(yōu)點,比如,可以自動地更新動態(tài)
的搜索結(jié)果,不需要用戶特意去再次執(zhí)行搜索。許多其它的Portlet MVC框架試圖向開
發(fā)人員徹底隱藏這種兩階段處理,讓框架看上去盡可能和傳統(tǒng)的Servlet開發(fā)相同 - 在我們
看來,這種方式去掉了使用Portlet的一個主要好處,所以在Spring Portlet MVC
框架里分離的兩階段處理被保留了下來,這主要表現(xiàn)在,Servlet版本的MVC類將只
有一個方法來處理請求,而Portlet版本的MVC類里將會有兩個方法:一個用在動作
階段,另一個用在顯示階段。比如,在Servlet版本的 AbstractController
有
handleRequestInternal(..)
方法,Portlet版本的
AbstractController
有
handleActionRequestInternal(..)
和
handleRenderRequestInternal(..)
方法。
這個框架是圍繞著分發(fā)器DispatcherPortlet
設(shè)計的,分發(fā)器把請求轉(zhuǎn)發(fā)給處理
器。和Web框架的DispatcherServlet
一樣,
這個框架還有可配置的處理器映射和視圖解析,同時也支持文件上傳。
Portlet MVC不支持本地化解析和主題解析 - 它們是portal/portlet容器
的范疇,并不適合放在Spring框架里。但是,Spring里所有依賴本地化(比如消息的
國際化)仍舊可以工作,因為DispatcherPortlet
在以
DispatcherServlet
相同的方式暴露當前的本地化信息。
缺省的處理器是一個非常簡單的
Controller
接口,它提供了兩個方法:
void handleActionRequest(request,response)
ModelAndView handleRenderRequest(request,response)
這個框架包含了許多相同的控制器實現(xiàn)層次,比如,
AbstractController
,
SimpleFormController
等。它在數(shù)據(jù)綁定、命令對象使用、
模型處理和視圖解析等方面和Servlet框架相同。
這個框架利用了一個特殊的橋Servlet
ViewRendererServlet
來使用Servlet框架里的視圖顯示
功能,這樣,Portlet請求就被轉(zhuǎn)化為Servlet請求,Portlet視圖能夠以通常的
Servlet底層代碼來顯示。這意味著,在Portlet里仍能使用當前所有的顯示方法,
如JSP、Velocity等。
Spring Portlet MVC支持Web Bean,這些Bean的生命周期在于當前的HTTP請求
或HTTP Session
(一般的和全局的)里,這不是
框架自身的特性,而是由使用的容器的
WebApplicationContext
提供的。
第?3.4.4?節(jié) “其他作用域”詳細地描述了這些Bean的作用范圍。
Spring發(fā)布包帶有完整的Spring Portlet MVC示例,這個應(yīng)用演示了所有Spring Portlet MVC框架的功能和特色。
你可以在samples/petportal
目錄下找到這個'petportal'應(yīng)用。