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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值