目的:
開發(fā)一個符合JSR-168標(biāo)準(zhǔn)的Portlet應(yīng)用,將其部署到Jetspeed2上。熟悉Portlet應(yīng)用的開發(fā)過程和了解Jetspeed2對Portlet應(yīng)用的支持情況。
背景資料:
JSR-168標(biāo)準(zhǔn):由Java Community Process(JCP)于2003年10月7日發(fā)布的Portlet Specification 1.0最終版本。定義了Portlet應(yīng)用的標(biāo)準(zhǔn)接口。獲得業(yè)界的廣泛支持。
內(nèi)容:
1、Portlet應(yīng)用代碼
本文中的介紹的Portlet應(yīng)用是由IBM developerworks提供的一個簡單Hello World示例。包括了doView方法顯示一個jsp頁面。使用Portlet中的processAction方法處理jsp中From表單提交的數(shù)據(jù),并把得到的數(shù)據(jù)放到一個Java Bean中,該Java Bean又被放到PortletSession中供jsp文件調(diào)用。具體說明和源碼下載可參見:
2、編輯打包
在編輯時需要兩個標(biāo)準(zhǔn)類庫:portlet-api-1.0.jar和pluto-1.0.1.jar。
注意:在打包時不要將這兩個類庫包含進去。因為在Tomcat/shared/lib里已經(jīng)有了,不然就會報Cannot create Portlet instance錯誤。
使用JDK的jar命令把項目文件打包成web archive 文件。
3、發(fā)布
將打包生成的HelloWorld.war文件拷貝到/jetspeed/WEB-INF/deploy目錄下即可。系統(tǒng)會自動部署到Portal中。
4、調(diào)用
在頁面編輯狀態(tài)下,點擊新增Portlet會出現(xiàn)“Portlet選擇器”。里面會新增一個“HelloWorld portlet”應(yīng)用。選中后確定就可將其添加到頁面中。
除此之外還有個更簡單的辦法可以顯示portlet。在/jetspeed/WEB-INF/pages目錄下的default-page.psml文件中增加一個fragment定義。
<fragment id="dp-19" type="portlet" name="HelloWorld::HelloWorldPortlet">
<property name="row" value="6"/>
<property name="column" value="0"/>
</fragment>
其中:
id 為任意項
name 為${portlet.application.id}和${portlet.name}的組合。
${portlet.application.id}是實際的war文件名;${portlet.name}為在portlet.xml中定義的<portlet-name>。
row ,column為頁面中的位置。
5、錯誤及解決方法
將應(yīng)用部署到頁面后發(fā)現(xiàn)不能正常顯示,報Portlet is Not Available錯誤。
經(jīng)過對日志分析,原來jetspeed2不支持PropertyManager容器服務(wù)。在代碼里使用了renderRequest.getProperty("wps.markup")獲得這個初始化參數(shù)的值。
修改程序通過初始化來獲得參數(shù)的值。
private static String defaultMarkupSource = "";
/**
* Initialize portlet configuration.
*/
public void init(PortletConfig config) throws PortletException
{
super.init(config);
defaultMarkupSource = config.getInitParameter("wps.markup");
}
private static String getJspFilePath(RenderRequest request, String jspFile)
{
//String markup = request.getProperty("wps.markup");
String markup = defaultMarkupSource;
if (markup == null)
{
markup = getMarkup(request.getResponseContentType());
}
return JSP_FOLDER + markup + "/" + jspFile + "." +
getJspExtension(markup);
}
重新編譯部署,應(yīng)用即可正常顯示。
總結(jié):
Jetspeed2.0支持JSR-168標(biāo)準(zhǔn),Portlet應(yīng)用可方便地部署到Jetspeed2.0上,操作非常便捷。應(yīng)用可正常運行。不足之處就是不支持Property Manager服務(wù),造成一些Portlet應(yīng)用的移植困難。
參考資料:
楊江,《Hello World,一個簡單的JSR 168 portlet》,