他の Web アプリケーションからの WebFacing アプリケーションのプログラマチックな起動

WebFacing アプリケーションは、他の Web アプリケーションからプログラマチックに呼び出すことができます。 これによって、WebFacing 生成ユーザー・インターフェースと既存の Web アプリケーションを統合する方法が提供されます。

WebFacing アプリケーションは URL から立ち上げられます。通常、WebFacing アプリケーションでは、各定義済み CL コマンドの URL はアプリケーションを開始するためにクリックするボタンとして表されます。WebFacing プロジェクトの作成時には、URL は invocations.jsp ファイルに書き込まれ、アプリケーションのデプロイ後にはアプリケーションを開始するためにクリックするボタンになります。

WebFacing の呼び出し方法を制御することによって、代替認証方式を使用することも可能です。すべてのユーザー認証は、現在 WebFacing が呼び出される前に、カスタム・サーブレットで実行できます。使用する認証メカニズムは、IBM i リソースにアクセスできるように、WebFacing アプリケーションに IBM i ユーザー信任状を提供できるものでなければなりません。

以下に、プログラムの立ち上げに使用する CL コマンドを決定するための簡単な例を示します。

コントローラー・サーブレットによって構成された URL:
WFInvocation.do?clcmd=call%20ordentr
この例では、ordentr は立ち上げるプログラムの名前です。 値 ordentr は、サーブレットによって決定されて、orderProgram などの変数に割り当てられます。サーブレットは、orderProgram に対して決定された値を使用して URL ストリングを構成し、次のような行を使用して変数 newURL にこれを割り当てることができます。
newURL = "WFInvocation.do?clcmd=call " + orderProgram;
newURL は、forward() または sendRedirect() メソッドの forward または redirect URL として使用できます。
この例では、ブラウザーによって使用される完全な URL は、リダイレクトとして送信されると、次のようになります。
http://<hostname>:<port>/<application>/WFInvocation.do?clcmd=call%20ordentr

この例は、http://<hostname>:<port>/<application>/ で始まる完全な URL を示しています。newURL の値は、この後のストリングです。つまり、ストリング WFInvocation.do?clcmd=call%20ordentr です。このような例では、URL の最初の部分 http://<hostname>:<port>/<application>/ はアプリケーションのホスト、ポート、コンテキスト・ルートを表しています。 コントローラー・サーブレットが同じコンテキスト・ルートにある場合には、必ずしもサーブレットが URL 全体を決定する必要はありません。 ただし、必要であれば、完全に修飾された URL ストリングを構成するようにサーブレットを構成することができます。

注: URL の文字 %20 は、ブラウザーに送られたときにエンコードされるスペース文字を表します。一般に、URL ではスペース文字を明示的に使用することはできません。URL ストリングが構成された newURL に割り当てられる例では、スペースは clcmd=call の直後のストリング部分にあります。ストリングにこのスペースがある理由は、この例が CL コマンド call ordentr を表していることにあります。構成される URL ストリングでは、直接 %20 を追加する必要はありません。サーバーは、必要に応じてこのエンコードを追加します。

動的に決定できる URL パラメーター

clcmd
プログラムを立ち上げる CL コマンド。
host
元の 5250 アプリケーションが置かれているホスト名。
port
IBM i 上の WebFacing サーバーのポート番号。
userid
ユーザー ID は、アプリケーションにログオンするために使用されます。 : コントローラー・サーブレットで forward() メソッドが使用される場合には、URL パラメーターは アプリケーション・サーバー層 (中間層) 内で送られるだけです。 sendRedirect() は、ブラウザーに URL パラメーターを公開する代わりに使用されます。 このために、sendRedirect() はそれほどセキュアではありません。 ユーザー ID やパスワードなどの情報がブラウザーのロケーション・フィールドで明かにされたり、ユーザーが使用中のページのプロパティーを表示する場合があるためです。
password
アプリケーションにログオンするために使用されるパスワード。 : コントローラー・サーブレットで forward() メソッドが使用される場合には、URL パラメーターは アプリケーション・サーバー層 (中間層) 内で送られるだけです。 sendRedirect() は、ブラウザーに URL パラメーターを公開する代わりに使用されます。 このために、sendRedirect() はそれほどセキュアではありません。 ユーザー ID やパスワードなどの情報がブラウザーのロケーション・フィールドで明かにされたり、ユーザーが使用中のページのプロパティーを表示する場合があるためです。
inv
アプリケーションの起動に使用される WebFacing CL コマンドの起動名。 ある CL コマンドにホスト、ユーザー ID、およびパスワードなどの値が定義されている場合、これらの値は、 プロジェクトに指定された一般的な値をオーバーライドします。 CL コマンドの起動名を表示するには、ワークベンチで WebFacing パースペクティブを開いて 「WebFacing プロジェクト」タブをクリックし、WebFacing プロジェクトを展開し、 さらに「CL コマンド」フォルダーを展開して、コマンドのラベルをクリックします。 起動名の値は、「プロパティー」ペインに表示することができます。 (「プロパティー」ペインが WebFacing パースペクティブに表示されない場合、これを開くには、 「ウィンドウ」 > 「ビューの表示」 > 「プロパティー」をクリックします。) 起動名を編集するには、「WebFacing プロジェクト」ビューで CL コマンドを右クリックし、「プロパティー」を選択します。

プログラマチック起動コマンドのフィルター処理

clcmd パラメーターを使用するプログラマチック起動に許可される CL コマンド接頭部を指定できます。clcmd パラメーターを使用していて、許可する接頭部で始まらない値を指定しているプログラマチック起動の実行はブロックされます。デフォルトでは、実行する CL コマンドをオーバーライドするプログラマチック起動は許可されません。

プロジェクトを WebFacing V6 からマイグレーションする場合は、すべての CL コマンドを実行できるように特殊値 *ALL が組み込まれます。

<context-param>
	<param-name>WFCLCMDAllowed0</param-name>
	<param-value>*ALL</param-value>
</context-param>

clcmd パラメーターが使用されていない場合、または使用されている clcmd の値が既知である場合は、*ALL 値を除去して、以下のように値を指定する必要があります。

許可するコマンド接頭部を指定するには、WebFacing アプリケーションの web.xml ファイルのソースを編集してください。WFCLCMDAllowed と、その後に続く、各パラメーターを明確に区別する追加テキストから成るパラメーター名を追加してください。次に、それぞれが許可されているコマンドを指定するようにパラメーター値を追加してください。次の例は、CALL MYCMD および GO MYMENU で始まるすべてのコマンドを許可するものです。

<context-param>
	<param-name>WFCLCMDAllowed0</param-name>
	<param-value>GO MYMENU</param-value>
	<param-name>WFCLCMDAllowed1</param-name>
	<param-value>CALL MYCMD</param-value>
</context-param>

必要に応じて、コンテキスト・パラメーターと値をさらに指定してください。

これは、CALL MYCMDisOKCALL MYCMD PARAM(ONE) などの clcmd 値を許可しますが、CALL MYCALL OTHERCMD などの値は許可しません。同様に、GO MYMENU の場合は、許可されるコマンドは指定されたストリングで始まるものでなければなりません。比較の場合は、大/小文字の区別は無視されます。

注: これは、clcmd パラメーターを使用しているプログラマチック起動にのみ影響します。 inv パラメーターを使用している WebFacing 起動は影響を受けません。

URL の例

WFInvocation.do?clcmd=call%20ordentr
デプロイメント記述子ファイル web.xml のホストとポートが使用されます。ユーザーがログオンするためのプロンプトを出力します。
WFInvocation.do?inv=INV1
ホスト、ユーザー ID、パスワード、および CL コマンドは、デプロイメント記述子ファイル web.xml から検索されます。 CL コマンドの起動名は INV1 です。 ユーザー ID やパスワードが失われたとき、またはプロンプトが指定されているときにのみプロンプトを出します。 ユーザー ID やパスワードが間違っていると、エラー・メッセージを表示します。
WFInvocation.do?inv=INV1&host=SYSTEM1&userid=WEBFACING&password=WEBFACING
CL コマンドの起動名は INV1 です。 ホスト、ユーザー ID、およびパスワードは URL によって渡されます。 複数のパラメーターは & で区切られます。
WFInvocation.do?clcmd=call%20ordentr&host=SYSTEM1&userid=WEBFACING&password=WEBFACING
CL コマンド call ordentr は URL によって渡されます。 ホスト、ユーザー ID、およびパスワードは URL によって渡されます。 複数のパラメーターは & で区切られます。
完全修飾の例

http://<hostname>:port/<application>/WFInvocation.do?clcmd=call%20ordentr&host=SYSTEM1&port=4004&userid=WEBFACING&password=WEBFACING

: この例では、ストリング <hostname> と <port> は、WebFacing アプリケーションが配置されているアプリケーション・サーバーのホスト名とポートを参照します。 <application> は、配置されたアプリケーションのコンテキスト・ルートです。 この例は、URL によって渡される以下の値を示しています。CL コマンドは call ordentr です。 5250 アプリケーションが置かれているホストは SYSTEM です。 ユーザー ID は WEBFACING です。 パスワードは WEBFACING です。複数のパラメーターは & で区切られます。

WebFacing アプリケーションをプログラマチックに呼び出すためのサーブレット・メソッド

WebFacing アプリケーションをプログラマチックに呼び出すためのサーブレット・メソッドは 2 つあります。 それらは次のとおりです。
  • forward() -- forward() メソッドは javax.servlet.RequestDispatcher クラスに入っています。
  • sendRedirect() -- sendRedirect() メソッドは javax.servlet.http.HttpServletResponse クラスに入っています。
この 2 つのメソッドのもっとも重要な相違点を以下に示します。
javax.servlet.RequestDispatcher's forward() メソッド javax.servlet.http.HttpServletResponse's sendRedirect() メソッド
サーバー・サイド呼び出し。このメソッドは、他のリソースを呼び出し、その出力をリトリーブして、それをクライアントに戻します。 HTTP 302 状況コードをブラウザーに送ります。ブラウザーは、リソースの URL に自動的に再接続します。この場合には、ブラウザーは、出力が他のリソースからきたことを認識します。