ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

45 WebCenter SitesのURLアセンブラ

この章では、WebCenter SitesのURLアセンブラについて説明します。これは、URLアセンブリとURL逆アセンブリを管理し、URLの表示の定義に使用できるインタフェースを提供します。

この章には次の項が含まれます。

45.1 WebCenter SitesのURLアセンブラの概要

URLアセンブラは、URL生成タグとともに、WebCenter SitesのURLの生成や、URLアセンブラが生成するURLの逆アセンブルに使用されます。

この項の内容は、次のとおりです。

45.1.1 URLアセンブリ

WebCenter SitesのURL生成タグ(<satellite.link>、<satellite.blob>、<render.getpageurl>、<render.getbloburl>、<render.satelliteblob>、<rendergettemplateurl>)は、ページやBLOBなど、WebCenter Sitesのリソースへのリンクの構成に使用されます。タグの使用時に指定するタグ属性やネストされた引数タグなどのデータは、URL定義と呼ばれる抽象オブジェクトに変換されます。URL定義はURLアセンブラに渡されます。次に、URLアセンブラはその定義を、返される文字列URLに変換します。

2つのアセンブラはWebCenter Sitesとともにインストールされますが、URLの外観を直接制御するために独自のアセンブラを作成するというオプションがあります。作成するアセンブラを使用できるようにするには、まずWebCenter Sitesにアセンブラを登録しておく必要があります。

デフォルトとして構成されているアセンブラは、WebCenter SitesのすべてのURLの作成に使用されます。デフォルトのアセンブラは変更できます。個々のリンク・タグで、このデフォルトのアセンブラの使用をオーバーライドすることもできます。

45.1.2 アセンブラ検出と逆アセンブリ

アセンブラは、アセンブラの作成者が求めるいずれのフォームでもURLを作成できるため、アセンブルされたリンクが要求される場合は、アプリケーション・サーバーによってURLをパラメータにデコードできない場合があります。デコードを実行するには、アセンブラが文字列URLをその定義に逆アセンブルできる必要があります。したがって、アセンブラは可逆性であり、アセンブルしたどのURLも逆アセンブルできます。

URLがデフォルトのアセンブラ以外のアセンブラを使用して作成されている場合は、デフォルトのアセンブラはそのURLを逆アセンブルできません。その時点で、次の上位ランクのアセンブラがそのURLの逆アセンブルを試みます。定義の作成に成功した場合は、アセンブラ・エンジンがそのアセンブラを検出したと言われ、定義がパラメータに変換されて処理されます。次の上位ランクのアセンブラがそのURLの逆アセンブルに失敗した場合は、3番目の上位ランクのアセンブラがコールされ、そのURLを逆アセンブルします。このプロセスは、URLが逆アセンブルに成功するまで続行します。このプロセスでは、アセンブラが、アセンブルしたURLを自己のものであると認識し、他のすべてのURLを外部のものであると認識できることが必要です。

アセンブラの作成、登録、ランク付けの詳細は、第45.3.1項「アセンブラの作成」および第45.3.2項「アセンブラの登録とランク付け」を参照してください。

45.1.3 GETリクエストとPOSTリクエストを使用するURLアセンブリとURL逆アセンブリ

URLアセンブラは、GETリクエストでのみ呼び出されます。これらはPOSTリクエストでは呼び出されません。たとえば、GETリクエストでページにアクセスする際、URLアセンブラが呼び出され、URLを逆アセンブルします。その後、WebCenter Sitesがそのページを開くために必要な適切なパラメータ(ccidpagenameなど)を定義に追加することで提供します(定義に存在しない場合)。ただし、method=postを使用したフォームなどのリクエストがPOSTされる場合は、URLアセンブラはURLの逆アセンブルには呼び出されません。したがって、WebCenter Sitesがページを開くために必要なパラメータは、postリクエスト自体の一部である必要があります。

これは、ページのテンプレートまたはエレメントに次のタグをエンコードすることで実行できます(サンプル値を、WebCenter SitesがページのURLに必要とするパラメータに置換)。

<satellite:form method="post" id="assetid">
<render:gettemplateurlparameters list="args" ... /><!-- add all parameters that are normally part of a URL -->
        <ics:listloop listname="args">
               <input type="hidden" name="<string:stream list="args" column="name"/>" value="<string:stream list="args" column="value"/>"/>
        </ics:listloop>

45.2 WebCenter Sitesとともにインストールされるアセンブラ

WebCenter Sitesとともにインストールされる2つのアセンブラは、QueryアセンブラとQueryAsPathInfoアセンブラです。

この項の内容は、次のとおりです。

45.2.1 Queryアセンブラ

Queryアセンブラは、問合せ文字列でURLを作成します。これはデフォルトのアセンブラで、WebCenter Sitesに自動的に登録されています。したがって、(デフォルトのアセンブラの変更やリンク・タグにおけるデフォルトのオーバーライドなどを)変更するまで、QueryアセンブラはすべてのURLの生成に使用されます。

45.2.2 QueryAsPathInfoアセンブラ

QueryAsPathInfoアセンブラは問合せ文字列を使用しません。かわりに、QueryAsPathInfoアセンブラは問合せ文字列をエンコードし、サーブレット名の末尾に付加します。このアセンブラの利点は、検索エンジンで索引付けできるURLを作成することです。QueryAsPathInfoアセンブラは、WebCenter Sitesに自動的には登録されていません。


注意:

サンプルURLアセンブラの実装は、FirstSiteIIのサンプル・サイトに付属しています。ソース・コードは、WebCenter Sites CDの次の場所に格納されています。

/ContentServer/FirstSiteII/PrettyURL/src/com/fatwire/firstsite/uri/FSIIAssembler.java

詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。関係のあるクラスは次のとおりです。

  • Definiton

  • Definiton.AppType

  • Definiton.ContainerType

  • AbstractAssembler

  • AbstractAssembler.AssemblyContext

  • AbstractAssembler.DisAssemblyContext

  • Assembler

  • DisAssembler

これは、コードを1ステップずつ実行できるようにFSIIAssembler.javaでデバッグ環境を設定する際に役立つこともあります。


45.3 アセンブラの使用

この項では、独自のアセンブラの作成と登録の方法について説明します。この項では、デフォルトのアセンブラの使用をオーバーライドするようにリンク・タグを変更する方法も説明します。

この項の内容は、次のとおりです。

45.3.1 アセンブラの作成

WebCenter SitesのURL Assemblyモジュールを使用して、独自のアセンブラを作成できます。このオプションにより、URLの外観を直接制御できます。

アセンブラを作成するには:

  1. com.fatwire.cs.core.uri.Assemblerインタフェースを実装するjavaクラスを記述します。このクラスの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。

  2. このクラスを.jarファイルにコンパイルします。

  3. WebCenter SitesのWebアプリケーション、およびインストールしたリモートの各Satellite ServerのWebアプリケーションにクラスをデプロイします。

    これは通常、作成した.jarファイルを、WebアプリケーションのWEB-INF/libフォルダにコピーするという意味です。リモートのSatellite Serverの場合は、resin/webapp/ROOT/WEB-INF/libフォルダにコピーするという意味です。

  4. WebCenter SitesとリモートのSatellite Serverすべての両方で、ServletRequest.propertiesファイルに新規のアセンブラを登録します(手順については、第45.3.2項「アセンブラの登録とランク付け」を参照)。

  5. WebCenter SitesとリモートのSatellite Serverすべてを再起動します。

45.3.2 アセンブラの登録とランク付け

URLの作成にアセンブラを使用できるようにするには、まずWebCenter Sitesに登録しておく必要があります。登録は、ショート・フォームに対応するアセンブラ・クラス名をプロパティ・ファイルに列記することで実行されます。登録には、アセンブラの使用順序を示すランキングも含まれます。

アセンブラを登録するには:

  1. プロパティ・エディタを起動します。

  2. ServletRequest.propertiesファイルを開きます。

  3. 「URIアセンブラ」タブをクリックして、アセンブラのプロパティにアクセスします。

  4. 登録するアセンブラのclassnameshortformを指定します。

    プロパティ名の3番目のエレメントは、アセンブラのランキングを示しています。ランキング0のアセンブラは最上位ランク(およびデフォルト)のアセンブラ、ランキング1のアセンブラは次の上位ランクです。以降も同様になります。

    デフォルトのアセンブラとして新規のアセンブラを構成する場合は、ランキング1のプロパティにclassnameshortformの値を入力します。

    たとえば、デフォルトのアセンブラとしてQueryAsPathInfoアセンブラを登録するための構文は、次のようになります。

表45-1 アセンブラのプロパティ

プロパティ名 プロパティ値

uri.assembler.0.classname

com.fatwire.cs.core.uri.QueryAsPathInfoAssembler

uri.assembler.0.shortform

pathinfo

uri.assembler.1.classname

com.fatwire.cs.core.uri.QueryAssembler

uri.assembler.1.shortform

問合せ



注意:

ランキングを下げた場合でも、Queryアセンブラが常に登録されていることを確認します。Queryアセンブラは、shortformの値をqueryとして登録する必要があります。


  1. 新規のアセンブラのランキングに応じて、その他のアセンブラのランキングを調整する必要がある場合もあります。すべてのアセンブラがプロパティ・ファイルで正しく構成され、ランク付けされていることを確認します。そうでない場合は、必要な変更を実行します。

  2. 「ファイル」「保存」を選択して変更内容を保存し、プロパティ・エディタを閉じます。

  3. インストールしたリモートのSatellite Serverごとに、手順1から2を繰り返します。

  4. WebCenter SitesとリモートのSatellite Serverすべてを再起動します。

45.3.3 リンク・タグの変更

WebCenter Sitesのリンク・タグは、デフォルトのアセンブラ以外のアセンブラを使用するように変更できます。リンク・タグは属性assemblerを受け入れ、値としてアセンブラのショート・フォームを取ります。

たとえば、個々のリンク・タグで、デフォルトのアセンブラをオーバーライドしてQueryAsPathInfoアセンブラにするための構文は、次のようになります。

<satellite:link pagename=example assembler=pathinfo />

45.4 WebページでのバニティURLリンクの生成

アセットに、name引数で渡されたテンプレートのバニティURLが含まれていると、タグはバニティURLを返すようになります。アセットにバニティURLが含まれていない場合、タグはSitesのURLを返します。<render:gettemplateurl>タグは、バニティURLリンクの生成に使用できます。これにより、リダイレクトされるURLは、常にバニティURL (存在する場合)を返すようになります。このような場合に既存のリンクにアクセスすると(たとえば、ブックマークから)、それ以降のすべてのURLはバニティURLになります。

特定のWebRootに対するバニティURLを作成するには、hostparamという追加のパラメータをrender: gettemplateurlに渡す必要があります。hostparamの値は、WebRootのhostname属性と一致する必要があります。これを使用すると、別のWebサイトや、同一Webサイト内のサブドメインへのリンクを生成できます。

<render:gettemplateurl outstr="pageURL" hostparam=<hostname of the WebRoot asset> tname='<%=ics.GetVar("template")%>' args="c,cid" />