Portal 使用體會

把IBM Portal應用到了一個小項目中.

Portal擴展了servlet的生命週期, 它的生命週期分爲很多層, 並且它也兼容原先servlet的生命週期, 舉個簡單的例子, 就是在用PorletRequest的同時, 你也可以用HttpServletRequest等實現一些特殊的功能, 不過這樣做的話, 會破壞Portal苦心經營的特性. Portal的含義就是門戶, 其要實現的目標就是要把各種各樣不同的獨立的內容以用戶自定義的佈局呈現給用戶, 給用戶一種更接近於桌面軟件的體現. 現如今的WEB程序好像都想要實現桌面程序的效果.

 當然, IBM Portal作爲一個成功的Portal框架, 它還需要很多其他的方便而實用的功能. 包括對內容的管理, 權限控制, 目錄服務等等等等, 並且可以和其他的框架很好的組合在一起, 比如Struts等. 而Webshpere Portal Server也能和其他各類Server整合在一起. 同是IBM的東西, 在一塊運行看起來沒什麼好奇怪的.

詳細介紹IBM紅寶書上講得很好, 講點碰到的一些小細節吧.

IBM Portal可以實現一個標準的當前流行的MVC架構, 它把WEB中的數據按SCOPE分爲若干層, 比原先servlet多了幾層, 這樣就可以在各個層次上進行數據傳遞, 數據操作, 更快更安全地完成原來WEB頁面功能. Portal通過這些層次結構來實現權限控制, 實現頁面的動態佈局.

Portlet之於Portal, 就好比Servlet之於Web程序, 只是現在一個Portal page可以布任意個Portlet而已. 貼幾圖吧:

Portal Page:

Portal Page

Portlet Class Hierarchy, 這個可以看出很多東西來了:

Portlet Class Hierarchy

Portlet 結構:

Portlet Architecture

Portlet Scope:

Portlet Scope

另外, 需要注意的是PortletData中的數據只能在Edit模式下更改, PortletSettings中的數據只能在Config模式下更改. 我們一般實現原先WEB功能, 都在View模式下就OK了, 其他模式只是爲了動態地控制頁面佈局之類的.

在Portlet中頁面跳轉, 不能直接寫入URL進行跳轉, 因爲Portlet對頁面的URL(URI)都進行過一些HASH操作. 所以在JSP頁面中, 可能用Portlet的標籤庫生成跳轉地址, 比如:

<FORM method="post" action="
    <portletAPI:createURI>
        <<portletAPI:URIParameter name="
action" value="SearchUser"/>
    
</portletAPI:createURI>
">

當然參數action也可以用隱形控件來傳遞:

<FORM method="post" action="<portletAPI:createURI/>" >
    
<INPUT type="hidden" name="action">
</FORM>

具體跳轉到哪裏, 由對應的Portlet讀取參數(這裏爲action), 再跳轉到相應的地方, 具體的對應關係一般可寫在配置文件中.

對於頁面中包含JS源, 也一樣, 不過路徑一般不要相當於當前網頁, 而是絕對的路徑, 不然可能會找不到JS源:

<SCRIPT src=<portletAPI:encodeURI path="/js/Validator.js" /> type="text/javascript" language="JavaScript"></SCRIPT>

如果這些跳轉要在JAVA文件中來生成, 則可以調用對應的PortletResponse的方法:

PortletURI uri = response.createURI(PortletWindow.State.MAXIMIZED);
uri.addParameter(
"action""name");

JS源:

response.encodeURL("/js/Validator.js");

要避免重名, 可用:

<portletAPI:encodeNamespace value=”name” />

或:

response.encodeNamespace("name");

Portlet中後臺用PortletRequest request時, 用request.getParameter("user_id"); 能取得JSP頁面中用tag進行編碼的參數”<portletAPI:encodeNamespace value='user_id' />”.

注意的是在JSP頁面上, request和response仍然是javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse, 而不是org.apache.jetspeed.portlet.PortletRequest和org.apache.jetspeed.portlet.PortletResponse.
不過在後臺request.setAttribute(name, value)方式傳到JSP的參數, 對於不同的Portlet, 哪怕是name一樣, 它們在JSP中得到的value還是各自的value, 這可能Portlet對name進行了重新Hash編碼.

 

紅寶書官方網: www.redbooks.ibm.cn

紅寶書下載: http://www.redbooks.ibm.com/abstracts/sg246681.html?Open

發佈了35 篇原創文章 · 獲贊 0 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章