<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
    http://dev2dev.bea.com.cn/techdoc/webplat/2005051905.html

     BEA WebLogic Portal 8.1? 框架的核心任務之一是創建一致且正確的 URL , 以便用戶在門戶頁面環境中與各種 portlet 進行 交互。撰寫本文的目的是為了向讀者介紹 WebLogic Portal 中 URL 創建過程的基礎結構。本文介紹 WebLogic Portal 如何創建 URL , 可以創建的各種 URL , URL 背 后的 API 和 層 , 以及使用 Web Services for Remote Portlets ( WSRP ) 提供或消費 portlet 時 URL 將會發生什么變化。在介紹 URL 創建過程的同時,我還將重點強調一些最佳實踐。閱讀本文之后,您將有能力避免大多數常見的 URL 缺陷,并且可以利用 portlet 提供一致的用戶體驗。

    問題

      為什么創建 URL 是 WebLogic Portal 的核心任務 ? 為什么 portlet 不能像在 HTML/JSP 頁面中創建 URL 那樣在以下示例代碼中創建 URL ?

      Click <a href="next.jsp">here</a> to continue.

      當用戶點擊與此類似的鏈接時 , 下面的某種情況將發生 :

    • 用戶將看到未經門戶頁面聚合的 next.jsp 內容。

    • 用戶將看到錯誤頁面,帶有可怕的異常堆棧跟蹤。

    • 如果門戶調用 portlet 使用的是 WSRP ,但是用戶不具有與 WSRP Producer 直接交互的權限,則該用戶的瀏覽器上將顯示一個 DNS 或安全性錯誤。

      要避免這些情況的發生 , portlet 必須要求 WebLogic Portal 創建 URL 。為什么 portlet 將此任務委派給 WebLogic Portal ? 原因如下 : 

    提示 在創建 portlet 時 , 不要假定關于 URL 結構的任何事情。實際結構不僅可以由部署在 portlet 的 Web 應用程序中的模板確定,而且也可以由客戶確定,比如 WSRP 。

    • 門戶是訪問 portlet 的網關 —— 當用戶與 portlet 交互(即提交表單或點擊鏈接)時,門戶接收用戶請求,查找負責處理該請求的 portlet ,然后調用 portlet 。門戶還可提供附加服務,如個性化、權利等。因此, portlet 創建的鏈接必須指向門戶,而不是指向 portlet 的 JSP 、 servlet 或頁面流。

    • Portlet 從門戶中去耦 ——Portlet 是可重用單元,可以將其聚合到多個門戶和桌面。因此, Portlet 不能對門戶頁面的 URL 假定太多。聚合 portlet 的門戶可以位于: (a) 本地,在同一 Web 應用程序中, (b) 在同一服務器上的不同 Web 應用程序中,或者 (c) 物理遠程位置。在 (b) 和 (c) 兩種情況下,門戶可以使用 WSRP 在頁面中聚合 portlet 。實際上,可以同時將同一 portlet 聚合到這三種類型的門戶頁面中。

    • Portlet 不知道部署 —— 更重要的是, portlet 對于如何部署它們無法假定太多。部署細節包括代理服務器、域名稱、端口,等等。 Portlet 對這些無法做出任何假定 。

      當您將 URL 的創建委托給 WebLogic Portal 時 , 它將對 portlet 屏蔽門戶頁面 URL 、域名稱、代理服務器等。門戶管理員和部署人員可以控制細節,無需破壞 portlet 中的任何 URL 。

      如果您非常想知道上述鏈接的創建方式(假定您要在簡單 JSP portlet 中創建這一鏈接),下面就是一個例子:

      Click <a href="<render:jspContentUrl contentUri="next.jsp"/>">here</a> to continue .

      現在 , 我們來檢查 WebLogic Portal 的 URL 的基礎結構

    URL模板

      WebLogic Portal 使用稱為 “ URL 模板 ” 的簡短 URL 片斷創建 URL 。它們不是有效的 URL , 需要進一步處理才能使用。要查看 URL 模板,需要創建門戶項目并檢查其 WEB-INF 目錄。在此目錄中,您將發現一個 url-templates-config.xml 文件。該文件中包含大量的默認 URL 模板。每個 URL 模板的外觀如下所示:

    <url-template name="default">
         {url:scheme}://{url:domain}:{url:port}/{url:path}?{url:queryString}{url:currentPage}
    </url-template> to continue.

    提示 : 您可以使用已知值替換任何可選標志。例如 , 如果您認為永遠不會通過 HTTP 訪問門戶頁面 , 則可以在所有 URL 模板中使用 “ http ” 替換“url:scheme” 。

      您將發現該文件不只是列出一個模板 , 而是列出多個模板。在討論為何需要多個模板之前,我們先看一看 URL 模板的結構。

    剖析URL模板

      URL 模板是帶有一個或多個標志的 URL 。這些標志由 WebLogic Portal 預定義,在使用遠程 portlet 的情況下,是 WSRP 1.0 規范規定的。所有標志均由大括號包圍 ( { , } ) 。使用 URL 模板創建 URL 時, WebLogic Portal 使用相應的值替代這些標志,這些值或者由 URL API 或者由 JSP 標記指定,或者從部署門戶的方式自動派生。

      每個 URL 模板中可以具有一個或多個下面的標志 :

    • url:scheme: 這是一個可選的標志,用于指定訪問該 URL 所需的 HTTP 方案。該值可以是“ http ”或“ https ”。如果在使用此 URL 模板時沒有為該標志指定值, WebLogic Portal 將使用可用于生成該模板在其中發揮使用的頁面的任一方案。例如,如果使用“ https ”訪問包含具有模板的 URL 的頁面,則它會將這一標志替換為“ https ”。

    • url:domain : 這是一個可選標志 , 用于指定訪問該門戶時使用的域的名稱。在大多數情況下,它就是在 WebLogic Portal 之前部署的代理服務器的域名稱。如果在使用 URL 模板時沒有為該標志指定值, WebLogic Portal 將使用傳入的 HttpServletRequest 的 getServerName() 的值。

    • url:port : 這是一個可選標志 , 用于指定訪問門戶時使用的端口號。在大多數情況下,它將是代理服務器的端口號。如果未指定值,則 WebLogic Portal 將使用傳入的 HttpServletRequest 的 getServerPort() 的值。

    • url:securePort : 這是一個可選標志 , 用于指定訪問門戶時使用的 SSL 端口號。在大多數情況下,它將是代理服務器的 SSL 端口號。如果未指定值,則 WebLogic Portal 將從服務器 / 代理配置獲取值。

    • url:prefix: 這是一個可選標志,如果您在代理服務器設置中使用路徑前綴,則需指定該標志 。

    • url:path : 所有 URL 模板都必須包括此標志。 WebLogic Portal 根據頁面是門戶的一部分還是桌面的一部分 , 使用相應的值替換它。

    • url:contextualPath : 此標志是可選的 , 應用于指向與 Web 應用程序上下文根相關的路徑的 URL 。一個示例是到與 Web 應用程序上下文根相關的圖像或文件的鏈接。

    • url:queryString : 所有 URL 模板都必須包括此標志。 WebLogic Portal 使用很多保留查詢參數 , 使用該標志替換那些查詢參數。實際替換的參數取決于如何和在何處使用這一模板。要查找有關這些保留查詢參數的更多信息,請參考 WebLogic Portal 框架中的 白皮書

    • url:currentPage : 這是一個可選項 , 用于在生成的 URL 中嵌入當前的頁面標簽。

    提示 記住使用用于設置代理服務器的路徑前綴替換url:prefix標志。

      創建門戶項目時創建的 url-templates-config.xml 文件中包含的模板列表 , 可以滿足大多數常見開發需求。

    URL的類型

      WebLogic Portal 使用三種 URL

    • 操作 URL : 這些 URL 可用于提交用戶互操作 ( 如表單提交和查詢鏈接 ), 可以由任何 portlet 創建。

    • 資源 URL : 資源 URL 可用于生成到靜態內容 ( 如圖像、樣式表、 JavaScript 文件、 pdf 文件等 ) 的鏈接。任何 portlet 都可以創建這些 URL 。

    • 呈現 URL 。呈現 URL 是一種特殊類型的 URL , 供 Java ( 符合 JSR168 的 ) portlet 和遠程 ( 使用 WSRP 的 ) portlet 使用。

      稍后我們將討論在 JSP 中如何創建這些類型的 URL 。

      參照前面的 url-templates-config.xml 文件 , 您將發現該文件具有兩個主要部分。第一部分定義大量模板。

      第二部分定義 Java 和 Page Flow portlet 如何使用這些模板。

      文件中定義的每個 url-template 具有一個名稱和一個字符串值。任何兩個 URL 模板的名稱都不能相同。

      字符串值是帶有一個或多個標志的 URL 模板字符串。

      此文件的第二部分為 Java 和 / 或 Page Flow portlet 定義一個或多個 url-template-ref 元素。使用這些元素可以指定要用于給定 URL 的 URL 模板。例如 , 以下片斷指定 , 名為 jpf-action 的 URL 模板可用于創建在頁面流中使用的操作 URL , 而名為 jpf-secure-action 的 URL 模板 可用于在頁面流中創建安全操作 URL :

     <jpf-url-templates>
       <url-template-ref type="action" name="jpf-action"/>
       <url-template-ref type="secure-action" name="jpf-secure-action"/>
       ...
    </jpf-url-templates>

    使用URL模板

      WebLogic Portal 提供了很多使用在前一節中定義的 URL 模板的方法。

    顯式使用URL模板

      利用 URL 模板 , 您可以使用 com.bea.portlet.GenericURL 及其子類創建 URL 。下面是一個示例 :

     <% 
        ResourceURL url = ResourceURL.createResourceURL(request, response);
        url.setScheme("http");
        url.setDomain("my.domain.com");
        url.setPort(8001);
        url.setPathPrefix("/static");
        url.setTemplate("my-resource-template");
        url.setPath("/images/my.jpg");
    %>
    <img src="<%=url.toString()%>"/>  

      此片斷使用 my-resource-template 創建到圖像的鏈接。執行時 , 該 JSP 生成以下代碼 :

    <img src="http://my.domain.com:8001/static/images/my.jpg"/>

    提示 確保正在使用的 URL 模板具有與 setter 方法相對應的標志。如果沒有 , WebLogic Portal 將忽略到 setter 的調用。

      注意 , 模板必須存在于 my-resource-template 文件中 , 此片斷才能生效。模板還必須具有一個指定的 url:prefix 標志 , setPathPrefix() 方法將替換 該標志。

    com.bea.portlet.GenericURL 或其子類的位置 , 您可以使用在呈現標記庫中可用的 URL 標記創建 URL 來代替。例如 , 可以使用 renderUrl JSP 標記來重寫上述 JSP 片斷 :
    <%@ taglib uri="render.tld" prefix="render" %>
    <img src="<render:resourceUrl port="8001" template="default-complete" 
          scheme="http" domain="my.domain.com" 
          pathPrefix="/static" path="/images/my.jpg"/> "/>

      注意 , 所有的框架主干 JSP 均使用呈現標記創建到窗口模式 / 狀態按鈕的鏈接、到頁面的鏈接 , 等等。

    在Portlet中使用URL模板

      使用 Page Flow 和 Struts 標記在 Page Flow 和 Struts portlet 中創建表單、鏈接等時 , 這些 JSP 標記通過 URL 重寫程序將 URL 創建委派給 WebLogic Portal 。這些 URL 重寫程序使用 jpf-url-templates 指定的 URL 模板創建 URL 。

      WebLogic Portal 中的 portlet 容器使用類似的方法處理 Java portlet 。創建 javax.portlet.PortletURL 時, portlet 容器使用在 url-templates-config.xml 文件中指定的 java-portlet-url-templates 。下面是一個示例:

    <%
       PortletURL actionURL = renderResponse.createActionURL();
       PortletURL renderURL = renderResponse.createRenderURL();
    %>

      WebLogic Portal 將分別使用 “ 操作 ” 和 “ 資源 ” 類型的 URL 模板生成這兩個 URL 的字符串值。

    遠程Portlet中的URL

      當您使用WSRP消費遠程portlet時,確保遠程portlet返回的標記引用門戶至關重要(WSRP Consumer)。使用遠程portlet時,Consumer充當最終用戶和WSRP Producer上部署的portlet的中間件。一般情況下,Producer可能設置安全性策略,限制最終用戶對部署在Producer上的資源的訪問權限。所以,未使用WebLogic Portal創建的鏈接在遠程portlet上可能失敗。

      WSRP 1.0規范為URL創建指定了兩種方法:“producer writing”和“consumer rewriting”。下面簡要介紹一下這兩種方法。

    Producer Writing

      此方法包括以下步驟:

    • Consumer 將一組 URL 模板發送給 Producer 。這些 URL 模板在結構上類似于上面討論的模板 , 不同的是它們包含由 WSRP 1.0 規范指定的標記。

    • Producer 使用這些 URL 模板創建 URL , 并向 Consumer 返回標記。

    • 如果需要 , Consumer 可以進一步處理 URL 以便 URL 引用 Consumer 。

      在這三個步驟中 , 只有第三步依賴于 WSRP Consumer 的實現方式。如果 WebLogic Portal 就是 Consumer , 則 Producer 的 URL 的編寫包括以下步驟 :

    • WebLogic Portal 使用一組用于遠程 portlet 的 URL 模板。這些模板連同其他 URL 模板一起在 url-templates-config.xml 文件中聲明。門戶 Web 應用程序的 WEB-INF 目錄中的 wsrp-producer-registry.xml 文件指定了必須用于遠程 portlet 的 URL 模板的名稱。注意這些模板中出現的額外標志。例如, wsrp-default 模板具有類似 {wsrp-interactionState} 、 {wsrp-navigationalState} 和 {wsrp-mode} 的標志。 WSRP 1.0 規范描述這些標志的意義。

    • Producer 使用這些模板創建 URL 。注意 , Producer 不一定是 WebLogic Portal 。使用其他實現也可以處理這些 URL 模板 , 因為這些標志是由 WSRP 1.0 規范定義的。

    • WebLogic Portal 聚合 Producer 返回的標記而不進一步處理。

    • 將 WebLogic Portal 設置為 Producer 時 , 它將使用 URL 模板 , 這一點與本地使用 portlet 的 情況類似。惟一的區別是 , 它使用 Consumer 發送的模板 , 而不使用在 Producer 本地部署的模板。

      下面是一個示例。我們假定您使用以下 JSP 部署 Page Flow portlet :

     <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
     <netui:anchor action="next">Next</netui:anchor>

    當您在 WebLogic Portal Consumer 中消費此 portlet 時 , 它將發送以下 SOAP 請求以獲取該 portlet 的標記 :

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <urn:getMarkup xmlns:urn="urn:oasis:names:tc:wsrp:v1:types">
          <urn:portletContext>
            <urn:portletHandle>portlet_1</urn:portletHandle>
          </urn:portletContext>
          <urn:runtimeContext>
            <urn:userAuthentication>wsrp:none</urn:userAuthentication>
            <urn:portletInstanceKey>portlet_1_2_1</urn:portletInstanceKey>
            <urn:namespacePrefix>portlet_1_2_1</urn:namespacePrefix>
            <urn:templates>
              <urn:defaultTemplate>
                http://localhost:7001/consumer/hello.portal?_nfpb=true&amp;
                _windowLabel=portlet_1_2_1&amp;_pageLabel=hello_page_2&amp;
                wsrp-urlType={wsrp-urlType}&amp;wsrp-url={wsrp-url}&amp;
                wsrp-requiresRewrite={wsrp-requiresRewrite}&amp;
                wsrp-navigationalState={wsrp-navigationalState}&amp;
                wsrp-interactionState={wsrp-interactionState}&amp;
                wsrp-mode={wsrp-mode}&amp;wsrp-windowState={wsrp-windowState}
              </urn:defaultTemplate>
              <urn:blockingActionTemplate>
                http://localhost:7001/consumer/hello.portal?_nfpb=true&amp;
                _windowLabel=portlet_1_2_1&amp;_pageLabel=hello_page_2&amp;
                wsrp-urlType=blockingAction&amp;wsrp-url={wsrp-url}&amp;
                wsrp-requiresRewrite={wsrp-requiresRewrite}&amp;
                wsrp-navigationalState={wsrp-navigationalState}&amp;
                wsrp-interactionState={wsrp-interactionState}&amp;
                wsrp-mode={wsrp-mode}&amp;wsrp-windowState={wsrp-windowState}
              </urn:blockingActionTemplate>
              <urn:renderTemplate>
                http://localhost:7001/consumer/hello.portal?_nfpb=true&amp;
                _windowLabel=portlet_1_2_1&amp;_pageLabel=hello_page_2&amp;
                wsrp-urlType=render&amp;wsrp-url={wsrp-url}&amp;
                wsrp-requiresRewrite={wsrp-requiresRewrite}&amp;
                wsrp-navigationalState={wsrp-navigationalState}&amp;
                wsrp-interactionState={wsrp-interactionState}&amp;
                wsrp-mode={wsrp-mode}&amp;wsrp-windowState={wsrp-windowState}
              </urn:renderTemplate>
              <urn:resourceTemplate>
                http://localhost:7001/consumer/resource?_windowLabel=portlet_1_2_1&amp;
                wsrp-urlType=resource&amp;wsrp-url={wsrp-url}&amp;
                wsrp-requiresRewrite={wsrp-requiresRewrite}
              </urn:resourceTemplate>
              <urn:secureDefaultTemplate>
                http://localhost:7002/consumer/hello.portal?_nfpb=true&amp;
                _windowLabel=portlet_1_2_1&amp;_pageLabel=hello_page_2&amp;
                wsrp-urlType={wsrp-urlType}&amp;wsrp-url={wsrp-url}&amp;
                wsrp-requiresRewrite={wsrp-requiresRewrite}&amp;
                wsrp-navigationalState={wsrp-navigationalState}&amp;
                wsrp-interactionState={wsrp-interactionState}&amp;
                wsrp-mode={wsrp-mode}&amp;wsrp-windowState={wsrp-windowState}
              </urn:secureDefaultTemplate>
              <urn:secureBlockingActionTemplate><![CDATA[
                https://localhost:7002/consumer/hello.portal?_nfpb=true&
                _windowLabel=portlet_1_2_1&_pageLabel=hello_page_2&
                wsrp-urlType=blockingAction&wsrp-secureURL=true&
                wsrp-url={wsrp-url}&wsrp-requiresRewrite={wsrp-requiresRewrite}&
                wsrp-navigationalState={wsrp-navigationalState}&
                wsrp-interactionState={wsrp-interactionState}&
                wsrp-mode={wsrp-mode}&wsrp-windowState={wsrp-windowState}]]>
              </urn:secureBlockingActionTemplate>
              <urn:secureRenderTemplate><![CDATA[
                https://localhost:7002/consumer/hello.portal?_nfpb=true&
                _windowLabel=portlet_1_2_1&_pageLabel=hello_page_2&
                wsrp-urlType=render&wsrp-secureURL=true&wsrp-url={wsrp-url}&
                wsrp-requiresRewrite={wsrp-requiresRewrite}&
                wsrp-navigationalState={wsrp-navigationalState}&
                wsrp-interactionState={wsrp-interactionState}&
                wsrp-mode={wsrp-mode}&wsrp-windowState={wsrp-windowState}]]>
              </urn:secureRenderTemplate>
              <urn:secureResourceTemplate>
                https://localhost:7002/consumer/resource?_windowLabel=portlet_1_2_1&amp;
                wsrp-urlType=resource&amp;wsrp-secureURL=true&amp;
                wsrp-url={wsrp-url}&amp;wsrp-requiresRewrite={wsrp-requiresRewrite}
              </urn:secureResourceTemplate>
            </urn:templates>
          <urn:runtimeContext>
          <urn:userContext xsi:nil="true" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
          <urn:markupParams>
            <urn:secureClientCommunication>false</urn:secureClientCommunication>
            <urn:locales>en-US</urn:locales>
            <urn:mimeTypes>text/html</urn:mimeTypes>
            <urn:mimeTypes>*/*</urn:mimeTypes>
            <urn:mode>wsrp:view</urn:mode>
            <urn:windowState>wsrp:normal</urn:windowState>
            <urn:clientData>
              <urn:userAgent>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 
                 SV1; .NET CLR 1.1.4322; FDM)</urn:userAgent>
            </urn:clientData>
          <urn:markupCharacterSets>UTF-8</urn:markupCharacterSets>
        </urn:markupParams>
      </urn:getMarkup>
    </soapenv:Body>
    </soapenv:Envelope>

      在此請求中 , 要注意的主要細節是模板元素。將 URL 模板發送到任何 Producer 之前 , WebLogic Portal Consumer 會將 URL 模板中的所有 Consumer 特定的標志替換掉 , 僅留下 WSRP 1.0 特定的標志。替換 WSRP 1.0 特定的標志由 Producer 來完成。注意,出于可讀性方面的考慮,上述消息中的模板的多個行被強制換行。

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <urn:getMarkupResponse xmlns:urn="urn:oasis:names:tc:wsrp:v1:types">
          <urn:markupContext>
            <urn:mimeType>text/html; charset=UTF-8</urn:mimeType>
            <urn:markupString><![CDATA[
              <a href="http://localhost:7001/consumer/hello.portal?_nfpb=true&
                  _windowLabel=portlet_1_2_1&_pageLabel=hello_page_2&
                  wsrp-urlType=blockingAction&wsrp-url=&wsrp-requiresRewrite=&
                  wsrp-navigationalState=&
                  wsrp-interactionState=_action%3D%252Fhello%252FHelloWorld%252Fbegin&
                  wsrp-mode=&wsrp-windowState=">Next</a>
         ]]></urn:markupString>
            <urn:locale>en-US</urn:locale>
            <urn:requiresUrlRewriting>false</urn:requiresUrlRewriting>
          </urn:markupContext>
        </urn:getMarkupResponse>
      </soapenv:Body>
    </soapenv:Envelope>

    提示 WebLogic Portal Producer 可以將 URL 模板存儲在 HTTP 會話中 , 所以 , WebLogic Portal Consumer 每個會話發送一次 URL 模板。

      注意 , Producer 使用 blockingActionTemplate 創建 netui:anchor 標記的鏈接。由于在這次響應中返回的 portlet 標記完全合格 , 不需要在 Consumer 上對其進行進一步地處理。

      如果您有意了解關于這些 SOAP 消息內容的更多信息 , 請訪問 OASIS WSRP TC 主頁 , 并下載最新版本的 WSRP 1.0 Primer 。

    Consumer Rewriting

      在此方法中 , Consumer 不發送 URL 模板 , 而是執行以下步驟 :

      Consumer 為 portlet 標記發出請求。該請求不包括 URL 模板。

      Producer 創建鏈接 , 這些鏈接被封裝在由 WSRP 1.0 規范指定的特殊標記中。

      Consumer 分析該標記 , 并使用適當的 URL 替換這些標記中的鏈接。

      對于上述示例 portlet , Producer 返回如下響應 :

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
        <urn:getMarkupResponse xmlns:urn="urn:oasis:names:tc:wsrp:v1:types">
          <urn:markupContext>
            <urn:mimeType>text/html; charset=UTF-8</urn:mimeType>
            <urn:markupString>Hello World 
               &lt;a href="wsrp_rewrite?wsrp-urlType=blockingAction&wsrp-secureURL=false
               &wsrp-interactionState=_action%3D%252Fhello%252FHelloWorld%252Fbegin/wsrp_rewrite">Begin
               &lt;/a></urn:markupString>
            <urn:locale>en-US</urn:locale>
            <urn:requiresUrlRewriting>true</urn:requiresUrlRewriting>
          </urn:markupContext>
        </urn:getMarkupResponse>
      </soapenv:Body>
    </soapenv:Envelope>

      注意 , 鏈接的 href 值被封裝在 wsrp_rewrite? 和 /wsrp_rewrite 標記之間。然后 , WebLogic Portal Consumer 分析這些記號中的標記 , 并使用部署在 Consumer 上的 URL 模板創建 URL 。 

    提示 : 如果將 WebLogic Portal 用作 Consumer , 則可以嘗試對 Producer 進行設置 , 以便更好地使用 URL 模板。

    Producer Writing還是Consumer Rewriting?

      URL 創建的兩種方法的主要不同點在于 URL 模板的使用。由 WebLogic Portal Consumer 發送給 Producer 的那種模板不需要對 Producer 返回的標記進行進一步地處理。因此,將 WebLogic Portal 用作 Consumer 時,此方法執行地較好。

      WebLogic Portal Producer ( 無論簡單還是復雜 ) 默認的設置是使用 Producer writing 生成 URL 。您可以通過更新 Producer 的 WEB-INF 目錄下的 wsrp-producer-config.xml文件改用 Consumer rewriting 。請參考 關于 WSRP 的 WebLogic Portal 文檔資料 以獲取更多細節。

    結束語

      在本文中 , 我的目的之一是想指出為什么創建 URL 對于提供一致的用戶體驗是關鍵一步。當您使用 WebLogic Portal 提供的 API 和 JSP 標記、 Page Flow 或 Struts 標記、或者 Java Portlet API 或標記時, URL 創建過程依賴于 URL 模板。 WebLogic Portal 具有消費本地部署的模板和遠程 Consumer 發送的模板的能力。這些功能在設計上允許 URL 模板控制所有創建的鏈接,以聲明的方式即可調整,無需更改代碼。

      反向工程生成的 URL 結構以手動創建鏈接 ( 即不使用任何 WebLogic Portal API 或標簽 ), 也是很可能實現的。這種鏈接在有些情況下可以使用,但是當部署配置變更或使用 WSRP 時,則很可能失敗。下面是最新的準則。始終使用以下標簽創建鏈接:

    • 在框架主干 JSP 和 portlet JSP 中 : com.bea.portlet.GenericURL 或其子類或者呈現標簽庫中的 URL 標簽

    • 在 Page Flow portlet 中 : Page Flow HTML 標記

    • 在 Struts portlet 中 : Struts HTML 標記

    • 在 Java Portlet 中 : Java Portlet API 或 portlet 標記庫中的 URL 標記

      您完全可以不使用這些標記 , 而按照自己的意思創建 URL 。但這樣的 URL 有時可能不可用。

    參考資料

    關于 WSRP 的 WebLogic Portal 文檔資料

    WebLogic Portal GenericURL 文檔資料

    描述 WebLogic Portal Framework 的白皮書

    OASIS WSRP TC 主頁

    關于作者

      Subbu Allamaraju 是 BEA Systems 的 WebLogic Portal 開發團隊的專職軟件工程師。從事 WSRP 標準及其 WebLogic Portal 實現方面的工作。此外他還在 subbu.org 上扮演一個技術博客的角色。

    原文出處

    http://dev2dev.bea.com/products/wlportal81/articles/urls_in_portal.jsp

    posted on 2005-05-19 19:28 笨笨 閱讀(652) 評論(0)  編輯  收藏 所屬分類: J2EEALLWeblogic Portal
    主站蜘蛛池模板: 亚洲日韩中文字幕一区| 亚洲国产一区国产亚洲 | 无码精品A∨在线观看免费| 久久久久亚洲AV无码网站| 在线观看国产区亚洲一区成人 | 亚洲人成网站在线播放影院在线| 免费人成在线观看视频高潮| 亚洲日韩中文无码久久| 国产在线观看免费av站| 女人18特级一级毛片免费视频| 日本免费福利视频| 一级人做人a爰免费视频| 免费下载成人电影| 亚洲精品女同中文字幕| 夜色阁亚洲一区二区三区| 亚洲一级毛片免费看| 日韩一区二区免费视频| a免费毛片在线播放| 免费人成在线观看播放国产 | jizz免费观看| 亚洲国产人成网站在线电影动漫| 免费精品国产自产拍在线观看图片| 亚洲人成自拍网站在线观看| 国产亚洲情侣一区二区无码AV| 美女露100%胸无遮挡免费观看 | 国产成人免费a在线资源| 在线毛片片免费观看| 99亚洲男女激情在线观看| 日韩午夜免费视频| 99久久免费观看| 色婷婷综合缴情综免费观看| 国产美女精品视频免费观看| 热久久这里是精品6免费观看| 亚洲日本国产综合高清| 久久久久久久综合日本亚洲| 国产无遮挡无码视频免费软件| 亚洲精品自产拍在线观看| 日韩免费视频播放| 免费精品国产自产拍在| 久久久久久国产精品免费无码| 亚洲一区二区三区久久|