亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Portlet規范介紹

2019-11-18 11:21:45
字體:
來源:轉載
供稿:網友

Portlet API參考實現的秘密

概要
 在Stefan Hepper和Stephan Hesmer的portlet系列文章的第二部分中,作者把著筆點從Portlet API的基礎概要介紹轉移到了Portlet API的參考實現(RI reference implementation也就是Pluto)的細節描述。作者還提供了一系列portlet的實例來說明怎樣擴展Portlet API的標準函數。
企業portal提供商使用可插的用戶接口組件(portlets)向信息系統提供表示層。不幸的是,以前的提供商都只定義了自己的portlet API,在整個行業之中互不相容。為了標準化整個行業進程,java團體發布了Java規范要求(JSR)168:Portlet規范。
這篇系列文章的第一部分介紹了jsp 168的細節。第二部分重點放在portlet API的參考實現(RI)上,也就是Pluto。此外還提供了一個portlet的實例,讀者可以通過這個實例來學習。
文章第一節描述了RI的體系結構,包括portlet容器的可拆卸性的概念和怎樣在其他項目中重用portlet容器。第二節介紹了RI的安裝和使用,以及怎樣快速配置portlet。其中文章還包括一個逐步深入的實例。
注重:你可以通過文章之后的資源鏈接下載原代碼

Pluto的體系結構
    讓我們先來看一下Pluto的體系結構和一些基本的概念。我們先簡要的說明portal的參考實現和portlet容器在整個portal體系結構中的位置。接下來我們在細節方面研究Pluto的體系結構。最后,我們看一下在portlet容器里很有趣的:portlet 展開。

關于portal
       Pluto一般用來演示Portlet API如何工作以及向開發者提供一個測試portlets的實例平臺。然而,假如沒有驅動來運行和測試portlet容器有點麻煩。Pluto的簡單portal組件只是架構于portlet容器,它只滿足了JSR 168的基本要求。(相比之下,Apache的開源項目Jetspeed就要專業的多。Jetspeed將著重中在了portal本身而非portlet容器之上,并且更多的考慮了其他團體的需求。)
圖一描述了portal的基本體系結構。Portal的網絡應用程序處理客戶端請求,從用戶的當前頁面得到portlets,之后調用portlet容器以獲得每個portlet的內容。portal使用Portlet 容器的 Invoker API來訪問 portlet容器,從 portal看來,portlet 容器的主要接口是支持基于請求的方法調用 portlets。容器用戶要想獲得portal的相關信息則必須實現portlet容器的PRovider SPI (Service Provider Interface)的callback接口。最終,portlet容器通過portlet API調用所有portlet。


 
圖一:Pluto中的一個簡單的portal的結構

Portlet容器
    
     Portlet容器是portlet的運行環境,也是每個portal的組成核心。它需要有關portal本身的信息,且它必須重用自身的公共代碼。因此,portlet容器和其他portal組件是完全分離的。這就是說,你可以將獨立的portlet容器嵌入任意的portal,只要你滿足portlet容器的條件,比方說實現所有的SPI。
Portlet容器的 Invoker API,或者叫入口點,扮演了portlet容器的主調用接口的角色。Portlet容器的Invoker API將portlet容器的生存周期(init,destroy)和基于請求的調用方法(initPage(),performTitle(),portletService()等等)結合了起來。因為portlet容器最后調用portlet的方法名有點類似portlet API的主portlet接口,不同的是是否必須要傳遞portlet定義符。正是因為這個附加的portlet定義符,portlet容器才能正確的調用portlet。
除了要用API訪問portlet容器之外,portal還必須擴展portlet容器定義的SPI。因此,RI引入了容器服務:在容器注冊過的可拆卸組件提供基礎功能并且可擴充。RI包含如下一些容器內的自建服務(前四個必須在運行portlet容器時實現,最后一個是可選的):
? 信息提供器:給portlet容器提供portal和portal框架的信息。通過這個接口來獲得信息和存儲portal信息。這些信息包括導航欄里的URL、portlet上下文、portlet模式和窗口狀態控制。
? 工廠治理器:定義了怎么怎樣通過工廠方法來獲得一個具體實現。(一個標準的portal應該已經存在一個實現。)
? 日志服務:定義了一個日志工具(一個標準的portal應該已經存在一個實現)。
? 配置服務:定義了怎么樣獲得配置參數(一個標準的portal應該已經存在一個實現)。
? 屬性治理器(可選):屬性治理器接口的實現答應處理JSR168規范中定義的屬性。
嚴格的說,portlet對象模型也是SPI中的一部分,只是它在SPI中占有一個非凡的地位。Portlet對象模型處理所有的potlet對象,他由一個交織在一起的接口集合組成。因此,不能把他和容器服務分開來考慮。
 
按此在新窗口瀏覽圖片

圖二:portlet容器結構
 
Portlet的部署

   portlet 容器 架構在servlet容器之上并且增強了它的功能。為了實現它,portlet 容器將原始servlet 加入每一個portlet應用程序的war文件中,這一點我們在圖三3中有所描述。部署portlet組件時,先取得原始的war文件,然后向其中加入一個新的或者修改原有的web.xml,并且加入一個servlet作為一個調用點來包裝每個portlet。之后, portlet的部署器(?這個原文是Then the portlet deployment passes the modified war file to the application server deployment)會傳遞一個修改過的war文件到應用服務器,將其部署到應用服務器系統。在portlet的調用過程中,portlet容器調用添加進去的servlet,作為部署portlet的war文件的入口點。
 
按此在新窗口瀏覽圖片

圖三:RI中portlet的部署

Pluto和WSRP標準

   正像第一部分所描述的那樣,JSR 168與遠程portlet網絡服務(the Web Services for Remote Portlets (WSRP))標準緊密結合。幾乎同時形成的這兩種標準發布了開源實現,實現了在各自的規范中描述必要的功能。作為共有的目標,兩種標準努力能夠在一起更好的合作?,F在,portlet容器可以很好的運行WSRP portlet。
Pluto可以在一個portal中運行多個portlet容器。從而Pluto的portlet容器可以被初始化多次。更重要的是,可以用不同的方式來初始化它。每一個portlet容器可以使用SPI的不同實現。

RI的安裝
 
   你會發現Pluto的安裝過程非常簡單。執行install命令,build目錄/build下的install.bat或者install.sh。接下來安裝程序會提示你指定Tomcat的安裝目錄。(注重:在MS windows下文件分隔符不是反斜杠。)
在這之后,安裝進程會創建RI和所有portlet,安裝portlet到指定的Tomcat目錄。安裝完成后請查看文檔以確定完成了所有必要的手工設置工作。
現在可以啟動Tomcat,通過http://localhost:8080/pluto/portal來訪問RI了。
就是這么簡單!
 
怎樣部署portlet
 
      在Pluto中部署portlet和它的安裝一樣的簡單。只要記住你必須首先安裝了Pluto,它正確的設置了prepareRun.properties。這是部署過程所必須的。在命令提示符下轉到build目錄,輸入命令deployPortlet.bat , 用portlet war文件做參數,比如:
deployPortlet.bat C:/pluto/portlets/bookmark_04/driver/bookmark_04.war

Portlet實例
     我們來看一個portlet的例子,Bookmark。它充分利用了Portlet API并且闡明了我們學到的概念。我們以一個簡單的例子開始,我們在每一節一步步擴展這個Bookmark portlet,最后我們將幾乎用到所有的portlet API,把它做成一個高級的portlet。
Bookmark portlet:版本一
第一個Bookmark portlet用到了Portlet API中如下的一些特性:
? Portlet API 接口The Portlet API interface
? Java服務器頁面(jsp)JavaServer Pages (JSP) pages
? Portlet API標簽庫The Portlet API tag libraries
? 部署描述符Deployment descriptors
第一個Bookmark portlet的兩個JSP頁面分別顯示和編輯模式。每個JSP頁面只是簡單的顯示了portlet的當前portlet模式和windwos狀態。為了顯示這些信息,我們用到了Portlet API標簽庫(只是部分程序代碼,請下載全部代碼,不然很難理解:譯者注):

public void doView (RenderRequest request,
RenderResponse response) throws PortletException, IOException {
        response.setContentType("text/Html");        
        String jspName = getPortletConfig().getInitParameter("jspView");
PortletRequestDispatcher rd = 
  getPortletContext().getRequestDispatcher(jspName);
        rd.include(request,response);
    }
接下來的代碼是例子中的一個簡單的JSP 頁面(即view.jsp:譯者注):
<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>

Hello,<br>
I am the bookmark portlet.<br>
<br>
Current Portlet Mode: <%=portletRequest.getPortletMode()%><br>
Current Window State: <%=portletRequest.getWindowState()%><br>
<br>
Bookmark portlet:版本二
 第二個Bookmark portlet進一步深入了Portlet API 的概念。除了第一例子所使用到的Portlet API 特性,它增加了:
? 動作處理Action handling
? Portlet 參數 Portlet preferences
? 驗證參數 A preferences validator
? 在部署描述符中預定義參數 Predefined preferences in the deployment descriptor
在第二個Bookmark例子里,兩個新的JSP頁面替代了版本一中的。首先,edit.jsp答應通過portlet動作添加和刪除書簽。在這個JSP頁面中輸入的書簽將作為portlet參數存放。其次,view.jsp 以超鏈接顯示出作為portlet參數存放的書簽。
Bookmark portlet:版本三
 新增用到的特性:
? 地區性部署描述符 Localizable deployment descriptor
? 資源包ResourceBundles
現在部署描述符和JSP頁面從資源包里(ResourceBundles)獲得可顯示的字符集,他們都可以支持英文和德文了。
Bookmark portlet:版本四
 最終的這個portlet例子通過portlet API傳遞遞交參量(render parameters)示范了導航的概念(the navigational state concept )。在版本四里有七個書簽,但默認一頁只顯示四個,如圖四所示。通過點擊next和back的超鏈接,用戶可以導航到向前或者向后的五個書簽。初始點將被初始化為遞交參量,使得用戶可以使用瀏覽器的刷新、后退和前進按鈕。


 
 Bookmark portlet版本四的界面

Portlet復習
   
   象你所看到的那樣,portlet規范的參考實現包括兩個部分:portal和portlet容器。Portal作為一個簡單的運行portlet容器的測試驅動。Portlet容器作為一個能迅速使用到其他portal(比如jetspeed)里的普通組件。
    這個portlet實例用到了許多portlet API里的很重要的概念。你可以用所有portlet API和servlet API的特性來擴展這個實例。比方說你可以用一個servlet在新窗口中輸出其他有用的信息,如一個打印預覽。還可以通過Http會話與portlet進行交互。實際上,因為portlet是一個強大的技術,能用他實現的功能是無窮無盡的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合免费视频影院| 成人免费在线视频网址| 久久亚洲精品小早川怜子66| 欧美xxxx做受欧美.88| 国产精品自拍偷拍视频| 91精品在线国产| 久久久999国产精品| 欧美久久精品午夜青青大伊人| 综合网中文字幕| 91亚洲精品在线| 成人免费网视频| 欧美视频不卡中文| 国内精品久久久久影院优| 亚洲精品视频网上网址在线观看| 98午夜经典影视| 亚洲欧洲在线视频| 亚洲黄色av女优在线观看| 日韩av在线免费观看一区| 国产欧美日韩最新| 国产在线视频91| 欧美日韩一区二区三区在线免费观看| 久久精品电影一区二区| 亚洲精品国产精品久久清纯直播| 高清日韩电视剧大全免费播放在线观看| 中文字幕久热精品视频在线| 国产精品观看在线亚洲人成网| 国产一区欧美二区三区| 欧美成人激情图片网| y97精品国产97久久久久久| 国产在线拍揄自揄视频不卡99| 国产成人免费av| 欧美在线性视频| 成人激情av在线| 亚洲天堂免费视频| 日韩在线中文字幕| 欧美日韩日本国产| 精品久久在线播放| 国产精品v片在线观看不卡| 亚洲一区二区在线播放| 亚洲色无码播放| 国产一区二区三区在线观看视频| 欧美高清videos高潮hd| 亚洲一区国产精品| 欧美激情久久久| 精品国产福利视频| 亚洲精品视频播放| 久久综合88中文色鬼| 亚洲国产精品大全| 国产91精品久久久| 亚洲免费视频在线观看| 亚洲国产精品va在看黑人| 日韩视频永久免费观看| 国产午夜精品视频| 欧美理论电影在线播放| 91久久久国产精品| 中文字幕亚洲色图| 中文字幕一区二区精品| 亚洲少妇激情视频| 日韩av电影国产| 国产精品久久9| 国产一区二区三区久久精品| 中文字幕亚洲字幕| 亚洲成人精品在线| 国产精品日日摸夜夜添夜夜av| 国产一区二区三区精品久久久| 国产精品久久久久久av| 亚洲国产欧美自拍| 欧美视频在线观看 亚洲欧| 国产又爽又黄的激情精品视频| 黄色精品一区二区| 日韩精品中文字幕在线播放| 久久69精品久久久久久国产越南| 亚洲自拍偷拍色片视频| 亚洲丝袜一区在线| 中文字幕日韩在线视频| 一本色道久久88精品综合| 日韩高清免费在线| 亚洲性视频网站| 欧美在线视频一区二区| 成人黄在线观看| 2019亚洲日韩新视频| 69精品小视频| 欧美中文字幕在线视频| 亚洲网站在线播放| 国产精自产拍久久久久久蜜| 欧美怡春院一区二区三区| 国产一区二区三区精品久久久| 国产91精品最新在线播放| 日韩精品视频免费在线观看| 亚洲性视频网址| 热久久美女精品天天吊色| 亚洲精品美女久久| 久久不射电影网| 日韩精品极品在线观看播放免费视频| 久久久久久这里只有精品| 国产精品激情av电影在线观看| 国产在线观看精品一区二区三区| 国内精品久久久久伊人av| 欧美人与物videos| 国产精品第2页| 日韩av免费看| 欧美日韩成人在线观看| 伊人伊成久久人综合网小说| 97香蕉超级碰碰久久免费的优势| 亚洲自拍中文字幕| 久久青草精品视频免费观看| 国产精品视频一区二区高潮| 国产欧美日韩视频| 久久av中文字幕| 欧美国产精品va在线观看| 欧美一级电影免费在线观看| 亚洲女人被黑人巨大进入al| 91亚洲精品久久久久久久久久久久| 一区二区三区久久精品| 亚洲精品电影网在线观看| 亚洲成人黄色在线| 日韩精品免费在线| 成人情趣片在线观看免费| 午夜精品一区二区三区在线播放| 国产精品夜间视频香蕉| 国产网站欧美日韩免费精品在线观看| 亚洲精品在线观看www| 国产精品国产三级国产专播精品人| 91精品视频在线看| 亚洲qvod图片区电影| 亚洲欧美变态国产另类| 不卡在线观看电视剧完整版| 国产香蕉精品视频一区二区三区| 国产中文欧美精品| 久久成人精品电影| 日韩av在线网页| 国产精品久久久久久久9999| 日韩av在线一区二区| 一区二区三区日韩在线| 国产精品久久久久久久9999| 国产精品视频男人的天堂| 78色国产精品| 91国语精品自产拍在线观看性色| 国产香蕉精品视频一区二区三区| 亚洲性生活视频在线观看| 国产成人高潮免费观看精品| 日韩电影免费观看在线观看| 亚洲精品久久在线| 亚洲成人av在线播放| 国产一区二区视频在线观看| 亚洲天堂av网| 欧美午夜电影在线| 国产欧美一区二区三区在线看| 欧美日韩国产成人在线观看| 欧美疯狂做受xxxx高潮| 久久国产精品久久久久| 国产精欧美一区二区三区| 日本午夜人人精品| 日韩精品极品在线观看| 日韩电影在线观看中文字幕| 青青草99啪国产免费| 国产精品美乳一区二区免费| 国内精品久久久久久久久| 综合久久五月天| 992tv在线成人免费观看| 狠狠躁夜夜躁人人爽天天天天97| 精品国内产的精品视频在线观看| 欧美激情亚洲综合一区| 97国产真实伦对白精彩视频8|