開發與部署分開 在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??蓮拇颂幭螺dIE60: 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中. |