apache上2.0的開發文檔很少,看了前人寫的2.0的開發示例,以及pluto2.0.1自帶的例子,完成了第一個開發例子。
相關參考資料:
IBM上的例子,以及 pluto2.0.1自帶的pluto-testsuite;
第一步:
首先配置Eclipse中的tomcat:
注意點: 在server窗口配置中, Server Locations 中選擇 Use Tomcat Installation,Deploy Path選擇 ${TOMCAT_HOME}\webapps,必須設定 Deploy Path 爲 Tomcat 安裝目錄下的 webapps 目錄,否則使用 Eclipse 啓動 Tomcat 後,Pluto 不能加載進來。(詳見IBM例子的tomcat配置說明)。
第二步:創建portlet應用:
1. 首先在Eclipse中,建立一個Dynamic Web Project
-- 注意創建Project時候,“dynamic web module version”:選用的versin,必須要和自己配置的tomcat版本相適應。自己在開發的時候,爲了調整tomcat,有時候用了tomcat5.5,可是工程配置不進來,原因就是在創建工程的時候選擇了2.5版本,而tomcat5.5只支持2.4的版本
2. 在 META-INF 下新建 context.xml 文件
<Context crossContext="true" />
該文件爲 Tomcat 的特有配置文件,根據 Pluto 的要求,該 Web 工程的上下文應該可以被其它 JavaEE 程序訪問,所以 crossContext 參數設置爲 true。
3. 在 WEB-INF 下新建 portlet.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0"> <!-- 在該位置填寫portlet描述內容,在後面開發好的portlet要加入進來 --> </portlet-app>
4. 新增Java類:
在IBM的說明中,是實現了 javax.portlet.Portlet 和 javax.portlet.ResourceServingPortlet 接口,在新下載的pluto test-suite中,是繼承了GenericPortlet
import javax.portlet.GenericPortlet;
public class TestPortlet extends GenericPortlet {
...
public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {
getPortletContext().getRequestDispatcher("自己的頁面").include(request, response);
}
@Override
public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(顯示的頁面);
dispatcher.include(request, response);
}
}
在這個類中的實現也和IBM的說明不同
5. 增加2個頁面:
portlet 呈現階段所顯示的 jsp 文件 TestPortletView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%> <portlet:defineObjects /> <table> <tr> <td><h1>Test portlet page.</h1></td> </tr> <tr> <td><a href="<portlet:resourceURL/>">Click me to request Resource URL</a></td> </tr> </table>
portlet 資源服務所請求的 jsp 文件 TestPortletResource.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0"%> <portlet:defineObjects /> <table> <tr> <td><h1>Test portlet resource page.</h1></td> </tr> </table>
6.編輯 portlet.xml 文件, 爲 TestPortlet 增加一個 portlet 定義片斷,該 TestPortlet 僅支持 View 模式
<portlet> <portlet-name>TestPortlet</portlet-name> <display-name>TestPortlet</display-name> <portlet-class>com.ibm.samples.jsr286.portlets.TestPortlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>TestPortlet</title> </portlet-info> </portlet>
7. 編輯 web.xml 文件,增加 Pluto 所需的 servlet 定義及映射。讀者請注意,該定義爲 Pluto 2.0 Portlet 容器所需,不屬於 JSR 286 標準的要求。
<servlet> <servlet-name>TestPortlet</servlet-name> <servlet-class> <!-- IBM例子中的類: org.apache.pluto.core.PortletServlet --> <!-- 在pluto2.0.1 test-suite中的類:--> org.apache.pluto.container.driver.PortletServlet </servlet-class> <init-param> <param-name>portlet-name</param-name> <param-value>TestPortlet</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TestPortlet</servlet-name> <url-pattern>/PlutoInvoker/TestPortlet</url-pattern> </servlet-mapping>
8. 將工程加到server中,運行server,餘下的部分,看一下IBM示例中的說明操作即可
在 Eclipse 的 Servers 視圖中,右鍵單擊 Tomcat 服務器,點擊 Add and Remove Projects,在彈出的對話框中將 jsr286portlets 項目添加到右側欄目中,點擊 Finish 確認,如圖13:
圖 13. 部署項目到服務器
在 Servers 視圖中啓動服務器,Console 視圖中輸出 Tomcat 啓動信息。
瀏覽器中輸入相應 url 訪問 pluto 的 portal 頁面,登錄,點擊 Pluto Admin 導航欄,如圖14:
圖 14. Pluto 管理界面
使用該工具新建一個頁面,如 "Test JSR 286 Portlet Page"。導航欄中馬上新增一項 "Test JSR 286 Portlet Page",點擊進入該頁面可以見到目前該頁面沒有內容。
選擇 jsr286portlets 應用程序中的 Portlet TestPortlet,選擇上一步新建的頁面,點擊 Add Portlet 按鈕,將 TestPortlet 佈局到 "Test JSR 286 Portlet Page"頁面。如圖 15:
圖 15. 佈局 Portlet 到 Portal 頁面
進入"Test JSR 286 Portlet Page"頁面,該頁面新增了一個 Portlet TestPortlet,如圖16:
圖 16. TestPortlet 界面
注意到上圖 portlet 的標題顯示爲 null, 這是由於 pluto 2.0 目前處於開發階段,存在一些 bug,讀者可不必理會。
點擊超鏈接,進入所請求的資源頁面,如圖 17:
圖 17. TestPortlet 資源界面
觀察此頁面,發現此頁面只顯示了 TestPortletResource.jsp 的內容,未經過 Portal 容器的修飾, 和直接請求一個 Servlet 或者 JSP 頁面的效果是一樣的。這就是 JSR 286 Portlet 資源服務的主要特性。對照此示例,