隨筆-86  評(píng)論-767  文章-3  trackbacks-3

          第三節(jié) ?什么是Portlet

          PortletPortal中最重要的組件,負(fù)責(zé)在Portal中呈現(xiàn)信息內(nèi)容,有相應(yīng)的生命周期。通過(guò)自定義Portlet,用戶(hù)很容易定義個(gè)性化的Portal頁(yè)面。PortletPortlet容器負(fù)責(zé)管理、處理請(qǐng)求并返回動(dòng)態(tài)頁(yè)面,可以作為Portal的可即插即用的界面組件。

          1.3.1? Portlet

          一個(gè)Portlet是以Java技術(shù)為技術(shù)的Web組件,由Portlet容器所管理,專(zhuān)門(mén)處理客戶(hù)的信息請(qǐng)求以及產(chǎn)生各種動(dòng)態(tài)的信息內(nèi)容。Portlet 為可插式的客戶(hù)界面組件,提供呈現(xiàn)層成為一個(gè)信息系統(tǒng)。

          這些由Portlet產(chǎn)生的內(nèi)容也被稱(chēng)為片段,而片段是具有一些規(guī)則的標(biāo)記( HTMLXHTMLWML ),而且可以和其他的片段組合而成一個(gè)復(fù)雜的文件。一個(gè)或多個(gè) Portlet 的內(nèi)容聚合而成為一個(gè) Portal 網(wǎng)頁(yè)。而 Portlet 的生命周期是被 Portlet 容器所管理控制的。

          客戶(hù)端和Portlet的互動(dòng)是由Portal通過(guò)典型的請(qǐng)求/響應(yīng)方式實(shí)現(xiàn),正常來(lái)說(shuō),客戶(hù)會(huì)和Portlet所產(chǎn)生的內(nèi)容互動(dòng),舉例來(lái)說(shuō),根據(jù)下一步的連接或者是確認(rèn)送出的表單,結(jié)果 Portal將會(huì)接收到Portlet的動(dòng)作,將這個(gè)處理狀況轉(zhuǎn)向到目標(biāo)Portlet。這些Portlet 內(nèi)容的產(chǎn)生可能會(huì)因?yàn)椴煌氖褂谜叨胁煌淖兓耆歉鶕?jù)客戶(hù)對(duì)于這個(gè)Portlet的設(shè)置。

          1.3.2? PortletServlet的關(guān)系

          Portlet被定義成為一個(gè)新的組件,具有新的明確的界面與行為。為了盡可能與現(xiàn)有的 Servlet 結(jié)合達(dá)到重復(fù)使用的目的,Portlet 的規(guī)范利用了 Servlet 的規(guī)范,許多觀念都很相似的,結(jié)合 PortletServlet Jsp 在同一個(gè)網(wǎng)站系統(tǒng)中,我們稱(chēng)為Portlet 應(yīng)用 。在同一個(gè) Portlet 應(yīng)用 中,他們將分享同一個(gè)類(lèi)加載器(ClassLoader),上下文(Context) Session

          Portlet Servlet 的相似之處

          @ Portlet 也是 Java 技術(shù)的 web 組件
          @ Portlet
          也是有特定的 container 在管理
          @ Portlet
          可以動(dòng)態(tài)產(chǎn)生各種內(nèi)容
          @ Portlet
          的生命周期由 container 所管理
          @ Portlet
          和客戶(hù)端的互動(dòng)是通過(guò) request/response 的機(jī)制

          Portlet Servlet 也有一些不同

          @ Portlet 只產(chǎn)生 markup 信息片段,不是完整的網(wǎng)頁(yè)文件。而 Portal 會(huì)將所有的 Portlet markup 信息片段放到一個(gè)完整的 Portal 網(wǎng)頁(yè)。
          @ Portlet
          不會(huì)和 URL 有直接的關(guān)系
          @
          客戶(hù)端必須通過(guò) portal 系統(tǒng)才能和 Portlet 互動(dòng)
          @ Portlet
          有一些定義好的 request 處理,action request 以及 render request
          @ Portlet
          默認(rèn)定義 Portlet modes 及窗口狀態(tài)可以指出在網(wǎng)頁(yè)中該 Portlet 的哪個(gè)功能正在執(zhí)行及現(xiàn)在的 狀態(tài)。
          @ Portlet
          可以在同一個(gè) portal 網(wǎng)頁(yè)之中存在多個(gè)。

          Portlet 有一些附加的功能是 Servlet 所沒(méi)有的

          @ Portlet 能夠存取及儲(chǔ)存永久配置文件及定制資料。
          @ Portlet
          可以存取使用者數(shù)據(jù)
          @ Portlet
          具有 URL 的重寫(xiě)功能在文件中去動(dòng)態(tài)建立連結(jié),允許 portal server 不用去知道如何在網(wǎng)頁(yè)的片 段之中建立連結(jié)及動(dòng)作。
          @ Portlet
          可以?xún)?chǔ)存臨時(shí)性的數(shù)據(jù)在 Portlet session 之中,擁有兩個(gè)不同的范圍:
          application-wide scope
          Portlet private scope

          Portlet 不具有一些功能, 但是 Servlet 卻有提供

          @ Servlet 具有設(shè)置輸出的文字編碼( character set encoding)方式
          @ Servlet
          可以設(shè)置 HTTP 輸出的 header
          @ Servlet
          才能夠接收客戶(hù)對(duì)于 portal 發(fā)出的 URL 請(qǐng)求

          1.3.3? Portlet的生命周期

          一個(gè)Portlet有著良好的生命周期管理定義了怎樣裝載實(shí)例化和初始化怎樣響應(yīng)來(lái)自客戶(hù)端的請(qǐng)求及怎樣送出服務(wù)。這個(gè)Portlet生命周期由Portlet接口的initprocessActionrenderdestroy方法來(lái)表達(dá)。

          載入和實(shí)例化:Portlet容器負(fù)責(zé)載入和實(shí)例化Portlet。當(dāng)Portlet容器運(yùn)行Portlet應(yīng)用或者延遲到Portlet需要服務(wù)使用者的請(qǐng)求時(shí),Portlet就會(huì)被載入并實(shí)例化。載入Portlet類(lèi)后,Portlet類(lèi)隨即被實(shí)例化。

          初始化:Portlet類(lèi)實(shí)例化后,Portlet容器還需要初始化Portlet。以調(diào)用Portlet去響應(yīng)客戶(hù)端的請(qǐng)求。Portlet容器呼叫Portlet接口中的init方法初始化Portlet。擴(kuò)展自PortletConfig的類(lèi)可以取出定義在部署描述文件中的初始化參數(shù),以及Resource Bundle

          初始化異常: Portlet初始化期間,Portlet可能會(huì)丟出 UnavailableException PortletException 異常。此時(shí),Portlet容器不能把 Portlet置入已啟動(dòng)的服務(wù),并且 Portlet容器必需釋放這個(gè) Portlet destory方法不能被呼叫,因?yàn)槌跏蓟徽J(rèn)為執(zhí)行失敗。發(fā)生 失敗后,Portlet容器會(huì)嘗試著重新實(shí)例化及初始化 Portlet。這個(gè)異常處理的規(guī)則是:由一個(gè)UnavailableException 指定一個(gè)不能執(zhí)行的最小時(shí)間,當(dāng)此異常發(fā)生時(shí),Portlet容器必需等到指定時(shí)間過(guò)去后才產(chǎn)生并且初始化一個(gè)新的 Portlet

          在初始化過(guò)程中所丟出的 Runtime Exception異常,被當(dāng)作 PortletException 來(lái)處理。

          第四節(jié)? Liferay Portal工作原理

          Portal系統(tǒng)根據(jù)需要由一個(gè)或者多個(gè)Portal頁(yè)面組成,每個(gè)Portal頁(yè)面包含零個(gè)或者多個(gè)的Portlet。每個(gè)Portlet呈現(xiàn)自己的信息內(nèi)容,以此實(shí)現(xiàn)內(nèi)容聚合。通過(guò)定義每個(gè)Portlet的可用權(quán)限,實(shí)現(xiàn)個(gè)性化的桌面信息定制。

          1.4.1? Portlet 樣式以及窗口狀態(tài)

          圖1.4.1-1.jpg圖1.4.1-2.jpg

          JCP組織提出的JSR168規(guī)范定義了Portlet的實(shí)現(xiàn)標(biāo)準(zhǔn)。每個(gè)Portlet對(duì)外表現(xiàn)為一個(gè)小窗口,有自己的默認(rèn)樣式和窗口狀態(tài)。如上圖,Portlet有自己的標(biāo)題,瀏覽狀態(tài)下支持編輯、關(guān)閉、上移、下移、最大化、最小化功能,編輯狀態(tài)下支持返回和關(guān)閉功能。從各種數(shù)據(jù)來(lái)源提取的信息以Portlet內(nèi)容的形式呈現(xiàn)在Portal中。

          Portlet樣式指出 Portlet正處于什么模式,Portlet通常會(huì)根據(jù)所處的模式而執(zhí)行不同的工作并產(chǎn)生不同的內(nèi)容。

          Portlet模式讓 Portlet決定它該顯示什么內(nèi)容和執(zhí)行什么動(dòng)作。調(diào)用一個(gè) Portlet的時(shí)候,Portlet 容器會(huì)提供一個(gè) Portlet模式給那個(gè) Portlet。當(dāng)在處理一個(gè)請(qǐng)求動(dòng)作時(shí),Portlet 的模式是可以用程序來(lái)改變的。

          JSR168規(guī)范定義了三個(gè)Portlet模式: 瀏覽、編輯和幫助,Liferay Portal支持其中的全部三個(gè)模式。同時(shí)Portal是可以根據(jù)使用者的角色,來(lái)決定是要提供(顯示)哪幾個(gè) Portlet 模式給使用者操作。

          例如,匿名使用者可以操作瀏覽和幫助等 Portlet 模式的內(nèi)容, 而只有授權(quán)過(guò)的使用者可以操作編輯這個(gè) Portlet 模式所提供的內(nèi)容或動(dòng)作。

          在瀏覽這個(gè)Portlet模式里,所被期望要提供的功能是產(chǎn)生標(biāo)記語(yǔ)言來(lái)表現(xiàn)此時(shí) Portlet的狀態(tài)。 舉例來(lái)說(shuō), Portlet的 瀏覽 模式可以包含一個(gè)或多個(gè)畫(huà)面讓使用者可以瀏覽與互動(dòng), 或是一些不需要與使用者互動(dòng)的靜態(tài)內(nèi)容。

          ?? 在編輯這個(gè)Portlet模式里, Portlet 需要提供內(nèi)容和邏輯來(lái)讓使用者定制 Portlet 的行為。典型的說(shuō),編輯模式的 Portlet 會(huì)設(shè)定或更新 Portlet 的參數(shù)設(shè)定值。

          在幫助這個(gè)模式里,Portlet應(yīng)該提供有關(guān)這個(gè) Portlet的幫助信息。這個(gè)幫助信息可以是有關(guān)這個(gè) Portlet的簡(jiǎn)單且條理清楚的視窗說(shuō)明或是詳細(xì)的說(shuō)明整個(gè)來(lái)龍去脈。所有的Portlet并不需要都提供幫助這個(gè)模式。

          一個(gè) Portlet可以根據(jù)窗口狀態(tài)來(lái)決定在一個(gè)頁(yè)面里該占多少空間。當(dāng)調(diào)用一個(gè) Portlet時(shí), Portlet容器 需要告訴該 Portlet目前的窗口狀態(tài)。 此時(shí) Portlet可以根據(jù)窗口狀態(tài)來(lái)決定它該對(duì)多少信息作處理。在處理請(qǐng)求的過(guò)程中, Portlet可以通過(guò)程序的方式來(lái)改變窗口狀態(tài)。

          posted on 2005-10-20 15:13 eamoi 閱讀(5461) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java
          主站蜘蛛池模板: 潞城市| 佛冈县| 漯河市| 安福县| 体育| 深泽县| 榕江县| 德钦县| 扎赉特旗| 独山县| 濉溪县| 福州市| 高密市| 朔州市| 鄂伦春自治旗| 纳雍县| 渝中区| 石狮市| 交城县| 平利县| 邻水| 罗山县| 界首市| 大埔区| 保山市| 盘锦市| 高州市| 苏尼特左旗| 深泽县| 安新县| 蒙阴县| 汉源县| 措美县| 黔东| 澜沧| 白水县| 吉隆县| 商水县| 白山市| 车险| 临夏市|