乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      BEA Weblogic Portal項目實施解決方案集

       smoking_boy 2005-08-24

      獲息BEA舉辦dev2dev原創(chuàng)技術(shù)文章大獎賽活動,恰巧我的項目也處于收尾驗收階段。作為Weblogic Portal8.1.2在國內(nèi)的第一次大型應(yīng)用,我覺得有必要把這次項目實施過程中的一些感想和經(jīng)驗整理成文并介紹給所有喜歡和使用Weblogic Portal的開發(fā)者。

      這篇文章以解決方案集的形勢收錄了這次項目實施過程中對一些典型問題的解決辦法。這些問題有的是Portal項目中最常遇到的,如單點登錄,內(nèi)容整合,有的則純粹是解決Weblogic Portal自身問題的小技巧,如Desktop的傳遞中文參數(shù)的問題。

      由于有太多經(jīng)驗和感想需要和廣大Portal開發(fā)著交流,所以這個解決方案集還有必要收錄更豐富的內(nèi)容,這部分工作還在進(jìn)行當(dāng)中。希望這些來自一線的實戰(zhàn)經(jīng)驗?zāi)軌驇椭?/span>Weblogic Portal在國內(nèi)的其他項目中取得勝利。

      陳龍 (dev2dev ID:SCEA)

      北京有生博大軟件軟件技術(shù)有限公司

      目錄:

      BEA Weblogic Portal項目實施解決方案集?來自WLP8.1 SP2在國內(nèi)的第一個成功應(yīng)用...

      利用UUP實現(xiàn)PortalLDAP同步用戶信息..

      同步用戶信息(profile)的必要性...

      LDAP服務(wù)器端的配置...

      WLS Admin console中的配置...

      WLP應(yīng)用中部署的 p13n_ejb.jar的配置...

      創(chuàng)建UUP.

      查看WLP admin console中的結(jié)果...

      利用UUP實現(xiàn)Portal和已有J2EE應(yīng)用的單點登錄...

      優(yōu)點和限制條件...

      第一步:制作online.usr文件...

      第二步:制作login.jspLoginBacking.java.

      第三步:制作SSOFilter.java.

      利用RSS技術(shù)實現(xiàn)Portal和其他Web應(yīng)用的內(nèi)容整合...

      Desktop中的中文問題...

      第一種方式...

      第二種方式...

      利用UUP實現(xiàn)PortalLDAP同步用戶信息

      同步用戶信息(profile)的必要性

      如果項目中有以下因素存在則有必要同步PortalLDAP服務(wù)器的用戶信息。

      1.         LDAP服務(wù)器為整個項目中的所有應(yīng)用作集中用戶身份驗證服務(wù)。在這種情況下Portal不一定要和LDAP同步。因為WLS作為WLP的基礎(chǔ)組件可以為Portal提供身份驗證服務(wù),所以只需要WLSLDAP同步即可。具體如何在WLS中配置LDAP身份驗證服務(wù)請看LDAP服務(wù)器端的配置WLS Admin console中的配置部分。

      2.         Portal的用戶數(shù)量眾多,而且由于用戶的所屬的組織機(jī)構(gòu)(ou)變化頻繁,導(dǎo)致用戶的角色經(jīng)常變化。在這種情況下,完全有必要讓PortalLDAP服務(wù)器獲取用戶信息,否則開發(fā)和維護(hù)的任務(wù)將相當(dāng)繁重。在Portal中為了達(dá)到基于角色的個性化,必須在Portal admin中給Portal組件指定具體的角色。讓Portal 訪問LDAP,從LDAP同步用戶的組織機(jī)構(gòu),解決了在Portal中維護(hù)用戶信息的問題,體現(xiàn)了LDAP作為用戶身份認(rèn)證服務(wù)的價值。

      文本框:

      下面將以業(yè)界領(lǐng)先的Novell NDS為例詳細(xì)描述具體的配置方法。NDS的基本配置情況可以通過圖1了解。

      1顯示了目錄樹的組織結(jié)構(gòu),其中Groups是用于管理的環(huán)境(Context),我們用來存放groups。

       Users是存放組織單元和用戶的組織(Organization)。

      LDAP服務(wù)器端的配置

      不同的LDAP服務(wù)器配置方法各不相同,下面方法簡單介紹Novell NDSLDAP配置,所有操作都在ConsoleOne中進(jìn)行:

      1.         Users下創(chuàng)建一個用戶PortalAdmin。該用戶應(yīng)該是配置WLS域的管理員,用戶名和密碼要和其完全一致。所以建議在配置PortalDomain時選擇使用PortalAdmin作為域管理員。如果需要修改PortalDomain的管理員名和密碼則需要修改PortalDomain根目錄下的boot.property文件,只要將username=password=后面的密文改為明文即可,當(dāng)?shù)谝淮沃仄?/span>WLS后,系統(tǒng)會自動把明文以3DES算法加密。

      2.         Groups下創(chuàng)建兩個組Administrators,PortalSystemAdministrators。

      3.         Portaladmin加入AdministratorsPortalSystemAdministrators組。

      4.          PortalAdmin分配權(quán)限。也就是指定PortalAdminUsers這個組織的受托者(Trustees)。在Users上點擊右鍵,選擇此對象的受托者(Trustees of This Object)。選擇PortalAdmin,然后選擇合適的權(quán)限。

      5.         為了讓PortalAdmin和管理環(huán)境Groups中的LDAP Group聯(lián)系,還要啟用明文口令。在LDAP Group上點擊右鍵,選擇屬性,在一般(General)項中選擇啟用明文口令復(fù)選框。

      WLS Admin console中的配置

      LDAP的身份驗證替換WLS默認(rèn)的身份驗證服務(wù)需要如下配置:

      1.         進(jìn)入WLS admin console(需要先啟動WLS),以下兩種方法都可以:

      • 打開IE瀏覽器,在地址欄輸入http:\<hostname>:<port>console。hostnameWLS所在的主機(jī)名,一般為本地主機(jī)localhost。portWLS的端口,默認(rèn)端口是7001。
      • Workshop中打開你的Portal應(yīng)用后,通過Tools->Weblogic Server->Weblogic Console打開。

      2.         admin console左側(cè)的樹型菜單依次展開Security -> Realms-> myrealm-> Providers-> Authentication

      3.         admin console右側(cè)頁面中選擇合適的目錄服務(wù)的類型。我們選擇Configure a new Novell Authenticator...

      4.         在新的頁面中,General 面板保持默認(rèn)值即可,如果有多個身份驗證服務(wù)器同時存在則需要考慮Control Flag的選項。點擊Create開始配置。

      5.         Novell LDAP 面板。這里的參數(shù)是Weblogic用來和LDAP連接的。輸入的參數(shù)有:Host ,NDS服務(wù)器的IP地址;Port ,NDS的端口號,默認(rèn)是389Principal ,Weblogic用來連接NDS的用戶名的DN,依照圖1應(yīng)該是cn=admin,o=Groups; Credential,DN的密碼。其他參數(shù)保持默認(rèn)。點擊Apply。

      6.         Users 面板。輸入的參數(shù)有:User Base DN,用戶的基礎(chǔ)DN,一般為用戶所屬的ouDN,如果用戶分散在多個以同一o為根的ou中就需要把該值設(shè)為包含這些ouoDN,依照圖1應(yīng)該是o=Users。其他參數(shù)保持默認(rèn)。點擊Apply。

      7.         Groups 面板。輸入的參數(shù)有:Group Base DN組的基礎(chǔ)DN,一般為管理環(huán)境的組織(o)DN,依照圖2應(yīng)該是o=Groups。其他參數(shù)保持默認(rèn)。點擊Apply

      8.         其他的面板暫時無需配置。配置完上述參數(shù)后重新啟動這個PortalDomain WLS,然后再次登錄WLS admin console。

      9.         admin console左側(cè)的樹型菜單依次展開Security -> Realms-> myrealm-> Users Security -> Realms-> myrealm-> Groups。檢查上述步驟配置的結(jié)果。

      10.     如果配置沒有問題,WLSLDAP獲得了用戶,還需要將原來的默認(rèn)身份驗證刪除。分別是:DefaultAuthenticator,DefaultIdentityAsserter。

      WLP應(yīng)用中部署的 p13n_ejb.jar的配置

      為了讓PortalLDAP獲得用戶信息,實現(xiàn)基于角色的個性化配置,就必須要部署一個無狀態(tài)Session BeanLDAP獲得用戶的信息。這個無狀態(tài)Session Bean負(fù)責(zé)UUPLDAP之間的映射。實現(xiàn)這個無狀態(tài)Session Bean有兩種方案,可以自己開發(fā),也可以使用WLPp13n_ejb.jar中提供的一個參考實現(xiàn),com.bea.p13n.usermgmt.profile.ldap。實際上,對這個參考實現(xiàn)作一些配置之后就基本能夠滿足項目的要求。下面是具體的配置方法。ejb-jar.xmlweblogic-ejb.xml位于你的Portal應(yīng)用的根目錄下的p13n_ejb.jar中的META_INF目錄中,application_config位于你的應(yīng)用的根目錄下的META_INF目錄中。

      1.         p13n_ejb.jar復(fù)制到另外一個目錄中。在這一新的目錄中執(zhí)行jar xvf p13n_ejb.jar META-INFejb-jar.xml META-INFweblogic-ejb-jar.xml命令,把p13n_ejb.jar中的META_INF目錄下的ejb-jar.xmlweblogic-ejb-jar.xml解壓出來。

      2.         修改ejb-jar.xml。找到<!-- Ldap Property Manager    這一行,取消這一注釋,使LdapPropertyManager這個無狀態(tài)session bean可以部署。

      3.       LdapPropertyManager的部署描述中的多數(shù)配置和WLS Admin console中的配置一致,見圖2。

      文本框:

           2 XMLSpy中看到的ejb-jar.xml

      如果配置了config/principalconfig/principalCredential兩項,就可以將config/credentialMBeanName這一項注釋或刪除掉。

      4.     找到<!-- User Profile Manager-->這一行,開始修改UserProfileManager的部署描述。

      5.     注意下面一項:

           <!-- map all properties in property set ldap to ldap server -->

           <env-entry>

              <env-entry-name>PropertyMapping/ldap</env-entry-name>

              <env-entry-type>java.lang.String</env-entry-type>

              <env-entry-value>LdapPropertyManager</env-entry-value>

         </env-entry>

      其中PropertyMapping/ldap指明LdapPropertyManager作為ldap這個UUP中的PropertySetLDAP服務(wù)器之間的映射,以后創(chuàng)建UUP文件時的名稱必須和這里指定的”ldap”完全一致。

      6.         修改下面一項:

         <!-- an ldap property manager -->

         <ejb-ref>

             <ejb-ref-name>ejb/LdapPropertyManager</ejb-ref-name>

             <ejb-ref-type>Session</ejb-ref-type>

             <home>com.bea.p13n.property.EntityPropertyManagerHome</home>

             <remote>com.bea.p13n.property.EntityPropertyManager</remote>

             <!-- <ejb-link>LdapPropertyManager</ejb-link> -->

             <ejb-link>EntityPropertyManager</ejb-link>

      </ejb-ref>

      修改為:

         <!-- an ldap property manager -->

          <ejb-ref>

             <ejb-ref-name>ejb/LdapPropertyManager</ejb-ref-name>

             <ejb-ref-type>Session</ejb-ref-type>

             <home>com.bea.p13n.property.LdapPropertyManagerHome</home>

             <remote>com.bea.p13n.property.LdapPropertyManager</remote>

             <ejb-link>LdapPropertyManager</ejb-link>

             <!-- <ejb-link>EntityPropertyManager</ejb-link> -->

      </ejb-ref>

             請注意home,remote接口和ejb-link的變化。

      7.         按需要,可在<!-- Group profile manager -->中作同樣修改。

      8.         取消對

          <method>

             <ejb-name>LdapPropertyManager</ejb-name>

             <method-name>*</method-name>

      </method>

             的注釋。ejb-jar.xml的修改完成。

      9.         修改weblogic-ejb-jar.xml文件,找到

      <!-- LdapPropertyManager

          <weblogic-enterprise-bean>

              <ejb-name>LdapPropertyManager</ejb-name>

              <enable-call-by-reference>True</enable-call-by-reference>        <jndi-name>${APPNAME}.BEA_personalization.LdapPropertyManager</jndi-name>

          </weblogic-enterprise-bean>

      -->

      取消對這一項的注釋。

      10.     取消對

          <method>

             <ejb-name>LdapPropertyManager</ejb-name>

             <method-name>*</method-name>

      </method>

      的注釋。weblogic-ejb-jar.xml的修改完成

      11.     META-INF中的ejb-jar.xmlweblogic-ejb-jar.xml都修改完成后,執(zhí)行jar uvf p13n_ejb.jar META-INF命令,將這兩個文件更新回p13n_ejb.jar中。然后將p13n_ejb.jar重新復(fù)制到Portal應(yīng)用的根目錄下,覆蓋原始文件。

      12.     修改application_config文件,在<CacheManager Name="CacheManager"></CacheManager>中加入一項:<Cache Name="ldapPropertyCache" TimeToLive="60000" Notes="Cache for UUP LDAP." MaxEntries="100"/>。該項配置同樣可以在WLP admin consoleService Administration->CacheManager中添加和修改。

      13.     所有的配置都完成以后,需要重新啟動weblogic,并在WLS admin console檢查p13n_ejb是否部署成功。

      創(chuàng)建UUP

      只有創(chuàng)建的UUP的文件名必須和上述ejb-jar.xml中的指定的文件名完全一致,LdapPropertyManager才可以把LDAP服務(wù)器中的User的屬性映射到UUP文件中定義的屬性集中。

      1.         Workshop中打開你的Portal應(yīng)用,在datauserprofiles下創(chuàng)建名為ldap.usr的屬性集文件。

      2.         屬性集中的屬性必須和LDAP服務(wù)器中的屬性對應(yīng)才會有意義。所以應(yīng)該對照LDAP服務(wù)器中的用戶屬性向ldap.usr屬性集中添加屬性。

      3.         可以去http://www./~gawojar/ldap/ 下載一個LDAP browser,在其中觀察LDAPUser對象的屬性。User對象的屬性類似圖3。

      文本框:

      3

      4.         對應(yīng)的我們在ldap.usr中加入如下屬性:

      文本框:

      4

      UUP屬性集中的屬性必須是LDAP服務(wù)其中User對象屬性的子或全集,并且屬性的類型一致。

      查看WLP admin console中的結(jié)果

      1.         登錄WLP admin console。在Workshop中打開Portal應(yīng)用后在通過Portal->Portal Administration打開。

      2.         WLS域管理員身份(PortalAdmin)登陸,該WLS域管理員也是在LDAP服務(wù)器端創(chuàng)建的超級用戶。

      3.         點擊Users & Groups,然后選擇一個組。在右側(cè)頁面的1號區(qū)域點擊Show All Users in Group,然后再2號區(qū)域點擊一個用戶名。

      4.         在新頁面中選擇Edit User Profile Values標(biāo)簽,然后在Properties from Property Set:選擇ldap。

      5.        

      文本框:

      可以看到LdapPropertyManager的映射結(jié)果,如圖5,可對比圖3觀看。

      5

      利用UUP實現(xiàn)Portal和已有J2EE應(yīng)用的單點登錄

      優(yōu)點和限制條件

      在企業(yè)應(yīng)用整合中,Portal負(fù)責(zé)的是表現(xiàn)層和部分Web Component(Portlets)層的整合。而在這些整合應(yīng)用中又以單點登錄(Single Sign-On)最為常見,其實SSO也最能代表Portal在應(yīng)用整合中的作用。

      下面介紹一個在項目中使用的簡單方案,他利用一個Servlet FilterWLPUUP實現(xiàn)了Portal和項目中的其他J2EE應(yīng)用通過同一個LDAP服務(wù)器進(jìn)行身份驗證的目的,用戶只需要在Portal中登錄一次,再訪問其他和Portal整合的應(yīng)用時無需再次登錄。這個Filter只需編寫一次就可以部署到多個Web項目中去,可復(fù)用程度高。

      線形標(biāo)注 1:

      這個方案也有一個限制,就是所有要整合的Web項目都必須是Portal應(yīng)用中的項目。如圖6所示:

                           6

      FTApp是一個Portal應(yīng)用。FTPortalFTAPP這個應(yīng)用下的一個Portal Web項目。RiseNet則是FTAPP這個應(yīng)用下的一個普通 Web項目。之所以這樣做是為了讓同一個Portal應(yīng)用下的項目共享一個Datasync Project,因為我們要用Datasync ProjectUUP機(jī)制存取同一個用戶在多個Web項目中的狀態(tài)。

      因為有這個限制,所以在實現(xiàn)單點登錄之前應(yīng)該把所有要整合到單點登錄環(huán)境的項目導(dǎo)入(Import)Portal應(yīng)用中來。導(dǎo)入的方法是在Portal應(yīng)用上點擊右鍵然后選擇Import Project。

      下面開始正式的開發(fā)工作。這個過程需要創(chuàng)建的工件有:一個登錄用的JSP頁面,login.jsp,以及這個JSP頁面用到的LoginBacking.java類;一個FilterSSOFilter.java;一個UUP文件,online.usr;

      第一步:制作online.usr文件

      Workshop中打開你的Portal應(yīng)用,在datauserprofiles下創(chuàng)建名為online.usr的屬性集文件。在文件中加入tokenpassword兩個屬性,他們的類型都是Single UnrestrictedOnline.usr的作用是存取已經(jīng)登錄的在線用戶的信息,用于以后在其他Web Project中登錄。

      第二步:制作login.jspLoginBacking.java

      這兩個文件可以從BEA提供的例子sampleportal中導(dǎo)入,然后在這個基礎(chǔ)上修改而來。他們的具體位置分別在:

      %BEA_HOME%weblogic81samplesportalportalAppsampleportalportletslogin.jsp

      %BEA_HOME%weblogic81samplesportalportalAppsampleportalWEB-INFsrcexamplesloginLoginBacking.java

      把這兩個文件導(dǎo)入到你的Portal項目的相應(yīng)位置。根據(jù)實際需要對login.jsp做一些界面修改即可,LoginBacking.java則要加入一些額外的邏輯,這些邏輯包括用戶在登錄進(jìn)Portal之后和退出Portal之前的操作兩部分。

      打開LoginBacking.java,進(jìn)行如下修改:

      1.         添加import com.bea.p13n.usermgmt.profile.*;

      2.         找到

      String username = request.getParameter("username");

      String password = request.getParameter("password");

      兩行代碼,在他們后面加入一行:

      ProfileWrapper profile = ProfileFactory.getProfile(username,"everyone");

      3.         找到Authentication.login(username, password, request);這一行代碼。這行代碼正確執(zhí)行的就是用戶登錄Portal。在這一行之后加入我們自己的代碼。我們的代碼要為用戶的這次登錄創(chuàng)建一個唯一的token,然后把這個token和用戶的密碼一起存入online.usr中。代碼示例:

      ‘文本框:

      代碼示例1

      4.         找到Authentication.logout(request);這一行代碼。這行代碼正確執(zhí)行的結(jié)果就是用戶退出Portal。在這一行之前加入我們自己的代碼。代碼將刪除在online.usr中存儲的用戶登錄tokenpassword。代碼示例:
      ‘文本框:

      代碼示例2

      5.         注意讀者自己處理以上步驟profile操作的異常。

      第三步:制作SSOFilter.java

      SSOFilter.java應(yīng)該部署到每一個和Portal整合的Web項目中,他的作用是檢查通過自己的Request對象,如果這個Request對應(yīng)的Session沒有登錄就從Request對象得到tokenusername參數(shù)。通過username參數(shù)從online.usr中查找Portal存儲的token。比較這兩個token,驗證用戶是不是已經(jīng)在Portal中登錄過的合法用戶。如果通過了驗證,程序還要把online.usr中存儲的password取出,和username一起作為這個Web應(yīng)用登錄的參數(shù)。在這個過程中發(fā)生任何錯誤都可以跳轉(zhuǎn)回Portal的登錄頁面,如果沒有錯誤和異常,這個Request就可以通過SSOFilter了。

      文本框: //Other Filters
<filter>
    <filter-name>SSO Filter</filter-name>
    <filter-class>filters.SSOFilter</filter-class>
</filter>
//Other Filters
//Other Filter mappings
<filter-mapping>
    <filter-name>SSO Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
//Other Filter mappings
      SSOFilter制作完成后還要在web.xml中添加<filter> </filter><filter-mapping> </filter-mapping>配置項。參考代碼示例3

      代碼示例3

      利用RSS技術(shù)實現(xiàn)Portal和其他Web應(yīng)用的內(nèi)容整合

      Portal和其他Web應(yīng)用內(nèi)容整合的最簡單方式就是使用<IFrame>,但是這種方式引發(fā)的Session同步問題在大型整合應(yīng)用中往往是讓人無法接受的。必須采用一種全新的整合方式,使被整合的各個應(yīng)用之間達(dá)到最大程度的松耦合。因為我們整合的是內(nèi)容,不涉及表現(xiàn),更不涉及業(yè)務(wù)邏輯,所以XML是我們的首選。其他 Web應(yīng)用把XML(內(nèi)容)格式的內(nèi)容信息傳遞給Portal,Portal使用XSLT(表現(xiàn))解析XML,把XML表現(xiàn)為HTML(內(nèi)容+表現(xiàn))各式展現(xiàn)給用戶。

      為了使整合方案形成規(guī)范并符合標(biāo)準(zhǔn),我們采用和RSS技術(shù),它是WEB站點之間交換內(nèi)容的標(biāo)準(zhǔn)??梢詮?/span>BEA Portalsampleportal例子中找到符合RSS2.0規(guī)范的XML文件(rssBEA.xml)和解析XMLXSL文件(位于rss.jsp)。我們可以從sampleportal中導(dǎo)入這兩個文件,然后在這個基礎(chǔ)上修改而來。他們的具體位置分別在:

      %BEA_HOME%weblogic81samplesportalportalAppsampleportalportlets ss ssBEA.xml

      %BEA_HOME%weblogic81samplesportalportalAppsampleportalportlets ss ss.jsp

      sampleportal演示的是如何整合外網(wǎng)信息,也就是整合的內(nèi)容對于每個用戶都是一樣的,比如Yahoo的新聞等。而具體項目中的要求往往是整合的信息需要根據(jù)用戶的權(quán)限和角色的不同而不同,也就是個性化的內(nèi)容,如通知,待辦文件,郵件列表等。這就對整合方案增加了如下要求:

      1.         個性化內(nèi)容整合的前提還是單點登錄。必須首先實現(xiàn)單點登錄才可以使其他Web應(yīng)用為用戶提供安全的,個性化的內(nèi)容。

      2.         Portal發(fā)往其他Web應(yīng)用的請求無需攜帶用戶名和密碼等識別用戶身份的參數(shù),因為在第一次登錄這個Web應(yīng)用時SSOFilter已經(jīng)解決了Session的問題并且在Session中添加了識別用戶身份的參數(shù)。

      3.         被整合的其他Web應(yīng)用需要根據(jù)用戶的身份動態(tài)生成XML內(nèi)容,然后把XML內(nèi)容響應(yīng)給發(fā)送請求的Portal。

      這個過程用圖說7明:


      7 虛線代表請求過程,實線代表響應(yīng)過程



      下面兩圖是一個整合的例子:

      8 一個模仿MSN風(fēng)格的Portal界面。其中每個Portlet的內(nèi)容都可能來自不同的外部應(yīng)用甚至Internet


      9 每個Portlet可以編輯自己的表現(xiàn)。因為我們只整合內(nèi)容,不整合邏輯。內(nèi)容和表現(xiàn)是分離的。

      Desktop中的中文問題

      WL Portal的中文問題很多就是WL Server的中文問題,只有少數(shù)和Portal自身相關(guān),但是這些問題更加隱蔽。這其中最迷惑人的就是Desktop的中文問題。


      可以通過兩種途徑看到Portal的界面。一種是在Workshop中用Workshop Test Browser打開正在設(shè)計的portal文件,這種方式用于開發(fā)人員測試和預(yù)覽Portal。另一種是在WLP Admin Console中通過Portal Management打開。這兩種方式打開的Portal界面雖然相似,但是Portal后臺的處理過程是完全不一樣的。

      第一種方式

      文本框:  Open as XML=>
      這種方式我們稱為”Single file mode”。這個”single file”指的就是在Portal項目中創(chuàng)建的擴(kuò)展名是.portal的文件。這個文件其實是一個xml文件,我們用Workshop設(shè)計這個Portal文件,采用托拽等可視化操作,其實是在修改這個xml文件。在這個Portal文件上點右鍵,選擇Open as xml,就可以看到這個Portal的本來面目了。如果鼠標(biāo)右鍵的彈出菜單中沒有,可以在Tools->Application Properties->Portal中選擇is the Open as XML Option available復(fù)選框。

      10

      Workshop Test Browser中展現(xiàn)這個Portal的過程如下圖所示:


      11

      第一步:Portal Server 首先解析.portal XML文件,從中得到這個Portal的全局配置屬性,從中得知portal使用了哪些組件(shell,books,pages,layouts,menus)。

      第二步:獲得這些portal組件的資源信息。

      第三步:按照資源信息,定位并找到這些資源(images,javascript,CSS,JSP,HTML)。

      第四部:把所有的資源合并成HTML。

      可以看出Portal Server會把.portal文件中的<portal:directive.page contentType="text/html;charset=GBK"/>這一行轉(zhuǎn)換成<%@ page contentType="text/html; charset=GBK" %>用于整個Portal中的所有JSP頁面,這一行的默認(rèn)值是charset=UTF8。所以在測試和預(yù)覽時的中文問題可以在這里解決。這個中文問題相對很好解決。

      第二種方式

      這種方式我們稱為”Database mode”。這種方式用于實際的使用當(dāng)中,即Portal的管理員在WLP Admin Console中根據(jù)角色把Desktop授權(quán)給相應(yīng)具有權(quán)限的用戶后,用戶在訪問自己的 DesktopPortal Server的處理方式。顯然Desktop中的中文參數(shù)傳遞問題不通過上述第一種方式的方法修改。

      注意到這樣一點,就是這種方式訪問desktopURL中包含appmanager。然后試圖去Web.xml中找到和這樣的URL匹配的Servlet。果然發(fā)現(xiàn)如下Servlet配置項:

      <servlet>

          <servlet-name>AppManagerServlet</servlet-name>

          <servlet-class>com.bea.netuix.servlets.manager.PortalServlet</servlet-class>

          <load-on-startup>1</load-on-startup>

        </servlet>

        <servlet-mapping>

          <servlet-name>AppManagerServlet</servlet-name>

          <url-pattern> /appmanager/* </url-pattern>

        </servlet-mapping>

      AppManagerServlet所在的包路徑得到線索,com.bea.netuix包負(fù)責(zé)用戶界面的合成和展現(xiàn)。所以進(jìn)一步發(fā)現(xiàn)com.bea.netuix.application.localization.definition.LocalizationLocale這個類(可以下載BEA PortalAPI文檔)。這個類中的public void setEncoding(String encoding),這個方法就是設(shè)置編碼字符集的。這個類還有一個靜態(tài)字符串常量public static final String DEFAULT_ENCODING,而這個變量的值是”UTF-8”。見圖12

      文本框:
      12

      WLP Admin ConsolePortal項目的其他配置文件中均沒有發(fā)現(xiàn)指定其他編碼字符集的方法。

      我們稱這種方式為”Database mode”是因為它是基于數(shù)據(jù)庫的,它需要從數(shù)據(jù)庫中查尋書然后合成用戶界面。那么關(guān)于字符集的信息也一定存儲在數(shù)據(jù)庫中。根據(jù)這個思路,進(jìn)行如下操作(sampleportal為例)

      1. Workshop中打開Tools->Weblogic Server->DataSource Viewer。見圖13        

      文本框:

      13

      2.         %BEA_HOME%weblogic81commonevalpointbase ools目錄中運行startPointBaseConsole.cmd

      3. Connect to DataBase窗口按照圖12的信息添加相應(yīng)選項,然后連接數(shù)據(jù)庫。見圖14        

      文本框:

      14

      4.         在左側(cè)的目錄中找到SCHEMAS->WEBLOGIC->TABLES->L10N_LOCALE表。在L10N_LOCALE上點右鍵,選擇Select * FROM “WEBLOGIC”.” L10N_LOCALE”。問題的根源一目了然。

      5.         按你的要求修改Encoding,Language等字段。

      總結(jié)

      其他解決方案還在整理之中,希望很快能夠和大家見面。也希望您能通過Email和我聯(lián)系,交流經(jīng)驗。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多