dev2dev 首页 > 资源中心 > 技术文章
BEA WebLogic Portal 8.1 使用技巧
时间:2004-12-05
作者:徐春金
浏览次数:
本文关键字: |
|
开发与部署分开
在WLP81中,可以在WORKSHOP中定义Portal,也可以在Admin Tool中中定义Portal.究竟有怎么区别呢?
原来WLP81与WLP70不一样,建议把应用的开发与最终的发布分开.即在workshop中把应用的所有portlet都开发,调试通过后,然后在WLP81的Admin
Tool中定义portal,desktop. 最终发布出去的是在Admin Tool中定义desktop.
最终用户通过访问desktop来访问portal 应用.
如何集成其他Web系统
如果要把其他的基于BS结构开发的Web系统集成到WLP81中,有以下几中方式.
1. Kapow
他是WLP81自带的组件.可以把一个网页的全部或裁剪网页的一部分,在WLP81的portlet中显示出来.
2. 采用WLP81带的JSP Tag: <es:uriContent>
3. 采用IFRAME
4. 采用Apache web scraping package
如何集成其他CS结构的系统
如果要在WLP81中集成CS结构的系统,个人认为主要有以下几种方式:
1. 在JSP中调用Web Service,Tuxedo Service,DCOM,CORBA等组件
把要集成的部分包装成Web Service,Tuxedo Service,DCOM, CORBA等组件.然后通过在JSP中调用这些组件来把内容在WEB
页面上展示出来.
2. JAVA API
如果这些CS结构的系统有JAVA API.那么可以在JSP中通过调用如果这些CS结构的系统有JAVA
API来把中调用这些组件来把内容在WEB 页面上展示出来
3. Citrix公司的MetaFrame Portlet
MetaFrame是Citrix公司所开发的一款解决远程访问相关问题的优秀产品,MetaFrame实现了基于服务器的计算机构---使得远程用户能够使用任何类型的终端系统,通过任何类型的网络连接,使用远程服务器上的任何应用程序。
MetaFrame产品采用了MultiWin和ICA两种主要技术。MultiWin允许多个用户可以同时使用某个应用程序;ICA(Independent
Computing Architecture)可以将应用的逻辑与界面分开。这两种技术的结合,使得应用程序可以随时随处发布,不再受客户端和连接性能的限制。
用户甚至能够使用同一个终端系统访问甚至远程多个不同平台、不同网络协议服务器上的多个应用,这些应用被集成在一个访问界面中,操作简便。详细资料参见:
http://www.achieva.com.cn/product/citrix/
Portlet的最大化,最小化等图片出不来
如果访问WLP81的Portal应用,无法显示Portlet的最大化,最小化等图片,可通过下面的方法解决:
1. 在%web-app%/framework/skins下增加一个名为zh的文件夹,然后skins目录下原有的文件夹(及所有文件)拷贝至zh文件夹内。
2. 在WEB-INF下面的netuix-config.xml下增加以下一段
<!--resoule the chinese problem -->
<localization>
<enable>true</enable>
<default-locale language = "en"/>
</localization>
替换header中的图片
如果要替换Portal Header中的图片,方法如下:从sample portal的framework/markup/shell中导入HeaderFooterVisitor.shell,右击desktop,从弹出菜单中选择shell/HeaderFooterVisitor.shell,然后双击Header,生成header.jsp,修改header.jsp即可。如果footer出不来,需要在shell文件中加入:
<netuix:footer>
<netuix:jspContent contentUri="/footer.jsp"/>
</netuix:footer>
然后将shell替换为原来的shell,再替换为新shell就可以。
设置Portal Domain的启动选项
在Portal Domain的启动脚本startweblogic.cmd中,通过设置下面的flag的值,来决定Portal
Domain的启动选项。
set DB_DB=workshop
set debugFlag=false
set specialFlag=false
set WLS_PRODUCTION_MODE=true
set testConsoleFlag=true
set iterativeDevFlag=true
set logErrorsToConsoleFlag=true
set pointbaseFlag=true
set profileFlag=false
set doExitFlag=true
set verboseLoggingFlag=false
set memmax=-Xmx512m
关闭portal的搜索引擎
如果你觉的Portal的搜索引擎没怎么用,可以把它关闭,方法如下:在Portal Domain的启动脚本startweblogic.cmd中,在下面的语句前加rem,注释掉。这样可以提高系统的性能。
rem start "Start Portal SearchEngine"
/MIN cmd /c
call "%WLP_HOME%\thirdparty\search\startSearchEngine.cmd"
rem start "Stop Portal SearchEngine"
/MIN cmd /c
call"%WLP_HOME%\thirdparty\search\stopSearchEngine.cmd"
WLP81对IE的要求
WLP81必须配合IE60才行,如果是IE50,在浏览Portal应用,或进入Portal
Admin Tool时,会抛出下面的Exception。可从此处下载IE60:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1e1550cb-5e5d-48f5-b02b-20b602228de6&DisplayLang=en
在WLP81中正确显示FLASH
1.可以通过FLASH PLUG-IN来显示。下面是一个例子:
<table border="0" cellpadding="5"
cellspacing="0" width="100%">
<tr>
<td background="/sampleportal/images/bg.gif"
width="100%" align="center"><object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
width="320" height="60" hspace="80"
align="middle">
<param name="movie" value="/sampleportal/images/test.swf">
<param name="quality" value="high">
<embed src="/sampleportal/images/test.swf"
width="100%" height="80" hspace="20"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash"></embed></object>
</td>
</tr>
</table>
2.通过WLP81的 Content Manager
把要显示的FLASH放到WLP81 CMS的REPOSITY中,然后通过CONTENT SELECTOR显示。例子如下:
<pz:contentSelector id="nodes" rule="xcj"
/>
<es:forEachInArray array="<%=nodes%>"
id="node" type="com.bea.content.Node"
> <ad:render id="node" height="200"
width="400"/>
</es:forEachInArray>
要注意的是: *.SEL文件应放到GlobalContentSelectors目录下,不要放到contentselectors目录下,否则,虽然在Content
preview中可以显示,但在运行环境下无法显示.
从WLP81的CMS中取内容并显示
下面的代码通过Content selector从WLP81的CMS中查询满足条件的文件,并在浏览器中显示。如是文件的filetype值是img就直接显示。如是文件的filetype值是doc就显示超联接。
<pz:contentSelector id="nodes" rule="sampleRule"
/>
<es:forEachInArray array="<%=nodes%>"
id="node" type="com.bea.content.Node"
>
<cm:getProperty node="<%=node%>"
name="filetype" resultId="type"
default="doc" />
<%
String fileType=type.toString();
if (fileType.equals("[img]"))
{
String simg = "<img src= ' " + "/Sampleportal/ShowBinary"
+ node.getPath() + "'>";
out.println(simg);
%>
<%
}
else if(fileType.equals("[doc]"))
{
String simg="<a href='http://localhost:7001/sampleportal/ShowBinary"+node.getPath()+"'
target='_blank' >预览下载</a>";
out.println(simg);
}
%>
</es:forEachInArray>
在IE浏览器中直接输入
http://localhost:7001/sampleportal/ShowBinary/BEA+Repository/mynode
可用来检查是否可以正确显示CMS中的内容。Mynode为相应节点的名称。
让WLP81正确处理中文
为了让WLP81能正确处理中文,需要设置下面几个地方。
1. 在web.xml中
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GBK</param-value>
</context-param>
2. 在weblogic.xml中
<jsp-descriptor>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
</jsp-descriptor>
3.修改*.portal文件的编码
可在ultraEdit中打开*.portal文件
修改其中的 <portal:directive.page contentType="text/html;charset=UTF-8"/>为
<portal:directive.page contentType="text/html;charset=GBK"/>
如果修改后,有一些JSP文件无法打开,可在ultraEdit中打开,把代码COPY 到Workshop
的source View中.
4.修改Workshop的编码
在代码中设置Page,Portlet的属性
在开发时,可以在Workshop的property Editor中设置page, portlet的属性.在代码中可以通过下面的方法设置或取得page,
portlet的属性.
try
{
PageBackingContext page =
PageBackingContext.getPageBackingContext(getRequest());
System.out.println("\n\n\n\n\ntitle=["
+ page.getTitle()+"]");
title=page.getTitle();
}
catch(Exception e)
{
e.printStackTrace();
}
如果把上面的page替换成portlet就可以得到portlet的属性
使PAGE折行显示
如果一个portal应用的page太多,默认只会显示为一行,太长.可修改文件framework/skeletons/default/singlelevelmenu.jsp,使他可以折行显示.例子如下:
int pageNum=0;
while (pages.hasNext())
{
pageNum++;
if(pageNum %15 ==0)
{
System.out.println("pageNum=" + pageNum);
out.println("<br><br>");
}
在WLP81中实现文件上传
可以通过Page Flow实现文件上传. 在JSP中,通过<netui:fileUpload>显示文件上传窗口.
<netui:fileUpload dataSource="{actionForm.file}"
size="50" accept="*/*" ></netui:fileUpload>
在jpf文件中可通过如下方式读取上传的文件,并保存到新的目录下.
try {
if(!form.getFile().equals(""))
{
InputStream is = form.getFile().getInputStream();
String fileName = form.getFile().getFileName();
FileOutputStream os = new FileOutputStream(new
File(uploadFolder+fileName));
byte b[] = new byte[128];
while(is.read(b)!=-1){
os.write(b);
}
is.close();
os.close();
}
}
catch(Exception e){
e.printStackTrace();
}
如果有中文问题,可以把该Page Flow 放到Iframe中.
| 作者简介 |
|
dev2dev ID: xcjing,BEA 资深技术顾问,加入BEA中国多年,在门户技术、RFID解决方案上有着丰富的经验。 |
作者其它文章
|