說在前面的話:?
??? 最近很忙很忙,很久沒吐過泡了,呵呵。近期筆者會將最近應用Spring Portlet MVC開發Portlet的一些經驗和教訓記錄在此,供大家共同研究,拍磚。
Chapter1 相關介紹
??? 最近很忙很忙,很久沒吐過泡了,呵呵。近期筆者會將最近應用Spring Portlet MVC開發Portlet的一些經驗和教訓記錄在此,供大家共同研究,拍磚。
Chapter1 相關介紹
Portlet:
??? 一個 Portlet 是以 Java 技術為技術的 Web 組件,由 Portlet Container 所管理,專門處理客戶的 request 以及產生各種動態的信息內容。Portlet 為可插式 ( pluggable ) 的客戶界面組件,提供呈現層成為一個信息系統。
這些由 portlet 產生的內容也被稱為片段 (fragment),而片段是具有一些規則的Markup( HTML、XHTML、WML ),而且可以和其他的片段組合而成一個復雜的文件。而 Portlet 中的內容正常來說是與其他 Portlet 的內容聚合而成為一個 Portal 網頁。而 Portlet 的生命周期是被 Portlet Container 所管理控制的。
?
Portlet Container:
??? portlet container 是提供 portlets 執行的環境,包含了許多 portlets 并且管理他們的生命周期,他也會永遠保存著 portlets 的喜好設置,一個 portlet container 接收到來自 portal 的請求后,接著將這個請求傳遞給存在 container 的 portlet 執行。portlet container 沒有義務去組合 portlets 產生的信息內容,這個工作必須由 portal 來處理。portal 和 portlet container 可以放在一起視為同一個系統的組件,或者分開成為兩個獨立的組件。
?
??? 當用戶請求一個portlet的時候,portlet container 接收 portlet產生的內容。通常 portlet container 將這些內容提交給 portal server,portal server 從這些內容建立 portal page 然后將它傳給客戶端。相關的介紹請大家參看JSR168 spec.
Spring Portlet MVC:
1. Portlet不能夠像Spring一樣直接經由HttpServletRequest指向相對路徑(如:action="/SpringDuty/sign.jsp")將頁面表單信息傳給指定頁面或者Controller,而是用另一種寫法經由指定的Action轉向(如:action"<portlet:actionURL> <portlet:param name='action' value='doIt'/></portlet:actionURL>");
?
2.?Portlet有自己定義的Request,文中使用到了兩種:ActionRequest*、*RenderRequest。
? ActionRequest:它的作用與HttpServletRequest相同,將當前表單對象傳給轉向對象。
? RenderRequest:在門戶系統中,Portlet之間的共享信息是放在RenderRequest中,這樣可以在單點登陸后每個Portlet即可在相應權限下獲取所需的信息(如用戶信息)
??? ActionRequest的獲取很簡單,不做贅述。如何獲得RenderRequest呢?為了獲得RenderRequest,可以首先讓Portlet經由一個自己做的DispatcherController通過protected ModelAndView handleRenderRequestInternal(RenderRequest arg0, RenderResponse arg1)方法來返回一個ModelAndView,其中ModelAndView返回一個Map對象,Map中放入RenderRequest對象arg0和RenderResponse對象arg1,View是需要呈現的首頁,這樣,首頁就能獲取RenderRequest了。
3. Portlet和Spring一樣,也有自己的轉發器org.springframework.web.portlet.DispatcherPortlet,它負責將獲得的Action轉發給相應處理。portlet根據自己的轉發器和當前Portlet的狀態決定跳轉到哪個頁面,大致流程如下:
? portlet根據配置信息,首先找到View或者經由Controller跳轉到View;
? 當進行相應動作時,portlet根據當前的狀態(view,edit,help)跳轉到相應View或者Controller;
? 其它過程與Spring類似.
? ActionRequest:它的作用與HttpServletRequest相同,將當前表單對象傳給轉向對象。
? RenderRequest:在門戶系統中,Portlet之間的共享信息是放在RenderRequest中,這樣可以在單點登陸后每個Portlet即可在相應權限下獲取所需的信息(如用戶信息)
??? ActionRequest的獲取很簡單,不做贅述。如何獲得RenderRequest呢?為了獲得RenderRequest,可以首先讓Portlet經由一個自己做的DispatcherController通過protected ModelAndView handleRenderRequestInternal(RenderRequest arg0, RenderResponse arg1)方法來返回一個ModelAndView,其中ModelAndView返回一個Map對象,Map中放入RenderRequest對象arg0和RenderResponse對象arg1,View是需要呈現的首頁,這樣,首頁就能獲取RenderRequest了。
3. Portlet和Spring一樣,也有自己的轉發器org.springframework.web.portlet.DispatcherPortlet,它負責將獲得的Action轉發給相應處理。portlet根據自己的轉發器和當前Portlet的狀態決定跳轉到哪個頁面,大致流程如下:
? portlet根據配置信息,首先找到View或者經由Controller跳轉到View;
? 當進行相應動作時,portlet根據當前的狀態(view,edit,help)跳轉到相應View或者Controller;
? 其它過程與Spring類似.
簡單介紹了Portlet的一些概念后,現在開始Spring Portlet MVC開發介紹吧。
???????????????????????????????????????????????????????To Be Continued...
???????????????????????????????????????????????????????To Be Continued...