目次 前 次 PDF


単純なサーブレット・サンプル・プログラム

単純なサーブレット・サンプル・プログラム
この例では、Oracle Joltを使用してWebLogicサーブレットからOracle Tuxedoに接続する方法を示します。また、WebLogic Serverを使用して、標準的なWebブラウザにHTMLフォームのフロント・エンドを表示します。
ユーザーがフォームに入力したテキストは、登録済のWebLogic HTTPサーブレットで処理されるHTTP POSTメソッドによってWebLogic Serverに返されます。このサーブレットは、Oracle Joltを使用してTuxedoサービスを呼び出します。サーブレットが受信したテキストはTuxedoサービスに送信され、サーブレットに返される前に大文字に変換されます。フォームは、サーブレットによって動的に生成されるHTMLページにコンパイルされ、Webブラウザに返されて、オリジナルのテキストが大文字で表示されます。
このトピックには次の項が含まれます:
サンプル・プログラムの構成要素と前提条件
Jolt for WebLogic Serverのサンプル・プログラムsimpappは、次の2つの要素で構成されています。
Oracle Tuxedoのインストール先ディレクトリであるsamplesディレクトリのサンプルに組み込まれているHTTPサーブレット。
Oracle Tuxedoと共にインストールされるTuxedoサンプルに組み込まれたTuxedoサービス・アプリケーション。Tuxedoのsimpappサーバーには、入力された文字列を大文字に変換するTOUPPERサービスが含まれます。
Joltサーブレットのサンプル・プログラムsimpappのソース・コードは、Tuxedoの/samples/jolt/wls/servlet/ディレクトリにあります。
simpappサンプル・ディレクトリには、次のファイルが置かれています。
 
ファイル名
説明
SimpAppServlet.java
Tuxedoに対する呼出しを発行し、結果のHTMLページを戻すサンプル・ソース・コード
simpapp.html
ユーザー入力用のHTMLフォーム
simpapp.rep
リポジトリ・バルク・ロード用のREPファイル
web.xml
Webアプリケーション用の構成XMLファイル
simpappアプリケーション・サービスのTuxedoサーバー側のソース・コードの一覧は、UNIXシステムでは$TUXDIR/samples/atmi/simpapp、Windows 2003システムでは%TUXDIR%¥samples¥atmi¥simpapp (TUXDIRはTuxedoのホーム・ディレクトリ)にあります。
このサンプル・プログラムを実行するには、以下の事項に精通している必要があります。
Oracle Tuxedoのアーキテクチャとsimpappアプリケーション
Oracle Jolt
HTML
Java言語とサーブレットAPI
WebLogic Server HTTPサーブレット
サンプル・プログラムを使用する
simpappサンプル・プログラムは簡単に設定できます。WebLogic Serverからsimpapp.htmlページを起動するだけです。simpapp.htmlページは、文字列入力用のテキスト・フィールドを含むHTMLフォームをロードします。文字列を入力して「POST」ボタンをクリックし、この文字列をPOSTリクエストとして送信します。SimpAppServletは、ユーザーが入力した文字列をJolt for WebLogicクラス・ライブラリで使用可能な形式に変換し、TuxedoのTOUPPERサービスへのリクエストをディスパッチします。このサービスは、文字列を大文字に変換してブラウザに表示します。
サーブレット・サンプル・プログラムsimpappを設定するには、次の手順に従います。
手順1..準備作業を行う
1.
クライアント・マシンにインストールされているブラウザが以下のいずれかであることを確認します。
Netscape Communicator 4.7以上
Internet Explorer 5.0以上
2.
クライアント・マシンは、Tuxedo環境への接続に使用するWebLogic Serverにネットワーク接続されている必要があります。
3.
Tuxedoとサンプル・プログラムsimpappを設定して起動します。
4.
サーバー側のsimpappアプリケーションを起動する方法については、Tuxedoのドキュメントを参照してください。TOUPPERサービスが使用可能であることを確認します。
5.
Joltサーバーを設定します。Joltサーバーの構成方法に関する情報については、『Oracle Joltの使用』を参照してください。
Joltサーバー・リスナー(JSL)に関連付けられたホスト名とポート番号を書き留めます。
Joltのバルク・ローダー・ファイルを使用して、メタデータ・リポジトリでTOUPPERサービスが定義されていることを確認します。
simpappサンプル・ディレクトリには、TOUPPERサービス定義を含むsimpapp.repファイルがあります。システム管理者は、バルク・ローダーを使用して、このサービス定義をTuxedoサーバー上の既存のメタデータ・リポジトリに追加する必要があります。詳細は、Oracle Joltの使用を参照してください。
次のサンプル・コードでは、Tuxedoサーバー上でJoltのバルク・ローダーを使用してTOUPPERサービス定義を追加します。
$ java bea.jolt.admin.jbld //host:port simpapp.rep
hostportは、Joltサーバー・リスナー(JSL)のホスト名とポート番号です。simpapp.repは、Oracle Joltによって提供されるバルク・ローダー・ファイルで、次のいずれかの場所にあります。
$TUXDIR/samples/jolt/wls/servlet/ (UNIXの場合)
%TUXDIR%¥samples¥jolt¥wls¥servlet¥ (Windows 2003の場合)
6.
インストール時にCLASSPATHが適切に設定されていることを確認します。WebLogic Serverのクラス・ライブラリには、このサンプル・プログラムを実行するために必要な次の3つの.jarファイルがあります。
jolt.jar
joltjse.jar
joltwls.jar
手順2.WebLogic Serverを起動する
Windows 2003システムを使用している場合、「スタート」メニューからWebLogic Serverを起動できます。それ以外の場合は、WebLogic Serverのルート・ディレクトリのコマンド行でstartWebLogicスクリプトを使用します。
WebLogic Serverの起動方法の詳細は、『Oracle WebLogic Server管理者ガイド』のWebLogic Serverの起動と停止に関する項を参照してください。
手順3.WebLogic Serverでサーブレットを構成する
Jolt接続プールと、WebLogic Server 6.0以降のスタートアップ・クラスの設定は、管理コンソールで行います。
1.
WebLogicドキュメントのルート・ディレクトリにsimpapp.htmlページをコピーします。
デフォルトでは、WebLogic Serverの\config\mydomain\applications\simpappディレクトリになります。WebLogicに組み込まれたHTTPサーバーは、このディレクトリでHTMLページとその他のMIMEの種類を検索します。
2.
ブラウザに次のアドレスを入力して、WebLogic Serverの管理コンソールを起動します。
http://hostname:listenport#/console
3.
コンソールの左側のフレームで「サービス」フォルダを開き、Joltフォルダをクリックします。右側のフレームに、ドメイン内で定義されたすべてのJolt接続プールを示すJolt「接続プール」表が表示されます。
4.
「新しいJolt Connection Poolの構成」をクリックします。右側のフレームに、新しい接続プールを設定するためのタブ付きのページが表示されます。
5.
「一般」タブに次の情報を入力します。
a.
「名前」、「最小プール・サイズ」、「最大プール・サイズ」、および「タイムアウト」属性フィールドに値を入力します。
b.
「セキュリティ・コンテキストを有効化」チェックボックスをオンにして、セキュリティ・コンテキストを有効にします。これにより、セキュリティ情報がWebLogic Server環境からTuxedo環境に伝播されます。
c.
「作成」をクリックすると、「名前」フィールドに入力した名前で接続プールのインスタンスが作成されます。左側のフレームのJoltノードの下に新しいインスタンスが追加されます。
6.
「アドレス」タブと「ユーザー」タブをクリックして確認し、フィールドの値を変更するか、デフォルト値を使用して、「適用」をクリックします。変更内容が保存されます。
7.
「ターゲット」タブをクリックして、Jolt接続プールを起動する使用可能なサーバーを選択します。
8.
左側のフレームで、「デプロイメント」フォルダの下にある「起動と停止」フォルダをクリックします。右側のフレームに「起動と停止」表が表示され、ドメイン内で定義されているすべてのスタートアップ・クラスが示されます。
9.
「新しいStartup Classの構成」をクリックします。右側のフレームにタブ付きのダイアログ・ボックスが表示されます。次の手順を実行して新しいスタートアップ・クラスを設定します。
a.
「名前」、「クラス名」、および「引数」属性フィールドに値を入力します。
b.
障害が発生した場合にWebLogic Serverを起動しないようにするには、「失敗したらサーバーを起動しない」チェックボックスをオンにします。
c.
「クラス名」に次の名前を入力します。bea.jolt.pool.servlet.weblogic.PoolManagerStartUp
このスタートアップ・クラスには引数はありません。
d.
「作成」をクリックすると、「名前」フィールドに入力した名前でスタートアップ・クラスのインスタンスが作成されます。左側のフレームの「起動と停止」フォルダに新しいインスタンスが追加されます。
10.
次の手順を実行して、simpappサーブレットをWebアプリケーションとして登録します。
a.
コンソールの左側のフレームで「デプロイメント」フォルダを開き、「Webアプリケーション」アイコンをクリックします。
b.
「新しいWebアプリケーションをインストール」をクリックし、「アプリケーションのアップロードとインストール」ページを表示します。
c.
ステップ1で、simpappサーブレットのインストール先としてデフォルトのディレクトリを使用するか、別のディレクトリを選択します。
d.
ステップ2で、simpappサーブレットへのパスを入力するか、「参照」を使用して選択し、「アップロード」ボタンをクリックします。
simpappサーブレットがWebLogicにWebアプリケーションとして登録され、Deployments¥Web Applicationsフォルダの下にアイコンが表示されます。
手順4.WebLogic Serverを停止して再起動する
Joltセッション・プールを起動するには、WebLogic Serverを停止して再起動する必要があります。WebLogic Serverの再起動方法については、『Oracle WebLogic Server管理者ガイド』のWebLogic Serverの起動と停止に関する項を参照してください。
手順5.サーブレットをコンパイルする
WebLogic Serverを再起動したら、次の手順を実行してSimpAppServletファイルをコンパイルします。
1.
WebLogicドキュメントのルート・ディレクトリ\config\mydomain\applications\simpappに、新しいWEB-INFディレクトリを作成します。
2.
Tuxedoのインストール・ディレクトリ\samples\jolt\wls\servlet\から新しいWEB-INFディレクトリにweb.xmlファイルをコピーします。
3.
次のコードでSimpAppServlet.javaファイルをコンパイルします。
javac -d %WL.HOME%\config\mydomain\applications\simpapp\WEB-INF\classes SimpAppServlet.java
これにより、必要なJavaクラスもWEB-INF¥classes ディレクトリにコピーされます。
手順6.simpapp.htmlフォームを表示する
1.
ブラウザを開きます。
2.
simpapp.htmlファイルのURLを入力します。たとえば、デフォルトのURLは次のとおりです。
http://localhost:port/simpapp/simpapp.html
localhostはWebLogic Serverのホスト名、portはWebLogic Serverがログイン・リクエストをリスニングするポートです。
図B-1に示すようなページが表示されます。
図B-1 simpapp.htmlの例
フォームが正しく表示されない場合は、simpapp.htmlファイルがWebLogicドキュメントのルート・ディレクトリにあることを確認してください。
手順7.フォームのデータをブラウザからポストする
HTMLページのテキスト・フィールドにデータを入力したら、「POST」ボタンをクリックして送信します。入力したデータとともに、その他のパラメータもWebLogic Serverで実行されているsimpappサーブレット・クラスに送信されます。
simpapp.htmlファイルのHTMLフォームに関する部分を以下に示します。
<form name="simpapp" action="simpapp" method="post">
<input type="hidden" name="SVCNAME" value="TOUPPER">

<table bgcolor=#dddddd border=1>
<tr>
<td>Type some text here and click the Post button:
<input type="text" name="string">
</td></tr>

<tr>
<td align=center><input type="submit" value="Post!">
</td></tr>
</table>
</form>
このHTMLフォームでは、ユーザー入力フィールドと非表示フィールドの2つの入力フィールドが指定されています。この例では、非表示フィールドの値により、起動するTuxedoサービスの名前が指定されます。Tuxedoサービスの名前をHTMLページに入れておくと便利ですが、セキュリティ上の理由から実運用環境では推奨できません。このHTMLページでは、非表示フィールドで別のサービス名を指定するHTTPリクエストを送信できます。
注意:
Tuxedoサービス名の大文字と小文字は区別されます。
WebLogic ServerがHTTPフォーム・リクエストを受信すると、WebLogic ServerによってsimpappサーブレットのdoPost()メソッドが起動し、フォームのデータがHttpServletRequestに渡されます。
手順8.リクエストを処理する
最初のリクエストをsimpappサーブレットに送信する前に、WebLogicがinit()メソッドを呼び出してサーブレットを初期化します。次の形式でJoltセッション・プールが確立されます。
ServletSessionPoolManager b_mgr =
(ServletSessionPoolManager).SessionPoolManager.poolmanager;
次に、サーブレットのdoPost()メソッドが実行されます。このメソッドには、WebLogic Serverの起動時に作成されたsimpappセッション・プールからの接続を取得するコードが含まれます。次に示すコードの抜粋は、simpappセッション・プールの取得方法を示しています。
// Get the "simpapp" session pool
ServletSessionPool session =
(ServletSessionPool) b_mgr.getSessionPool("simpapp");
呼び出されるTuxedoサービスは非表示フィールドで識別され、リクエスト・オブジェクトから取得されます。次のコードでサービス名パラメータを取得します。
String svcnm[] = req.getParameterValues("SVCNAME");
単一の値を含む文字列配列のSVCNAMEフィールドの値を取得します。ここでは、配列の最初の要素のみを使用します。フォームのSVCNAME隠し表示に設定された値は、TOUPPERです。これは、サーブレットが呼出すTuxedoサービス名で、次のようにcall()メソッドに渡されます。
// Invoke a service and get the result.
result = session.call(svcnm[0], req);
サンプル・プログラムのsessionオブジェクトは、HttpServletRequestオブジェクトを直接受け入れることが可能なServletSessionPoolです。このオブジェクトは、内部でデータを変換し、TOUPPERサービスのパラメータを含むJolt DataSetオブジェクトにします。
注意:
TOUPPERサービスでは、"STRING"というパラメータの大文字と小文字を区別する必要があります。そのため、HTMLフォーム内のテキスト・フィールドのラベルを"STRING"とまったく同一にする必要があります。SVCNAME,などのその他のデータ・フィールドは、パラメータとしては関連性がありませんが、Tuxedoサービスを中断しません。
フォーム・パラメータを使用してサービスに名前を付けると、サービス・パラメータとして渡す必要がありません。サービス名はHttpServletRequestオブジェクトに含まれるので、自動的に渡されます。
TOUPPERサービスは、"STRING"パラメータのテキストを大文字に変換し、実行される呼出しの結果を含むServletResultオブジェクトを使用してサーブレットに返します。また、サービス呼出し時に例外がスローされた場合は、例外の詳細情報も送信します。
手順9.クライアントに結果を戻す
最後の手順では、サービス呼出しの結果を含むHTMLページを作成して送信し、HttpResponse出力ストリームによってクライアントに返します。大文字で表示される結果は、result.getValue()メソッドを使用してServletResultオブジェクトから取得されます。
次の例は、ブラウザで表示可能なHTMLページでデータを戻す単純な方法を示しています。
out.println("<p><center><font size=+1><b>"+
result.getValue("STRING", "")+
"</b></font></center><p><hr
width=80%>");
出力ストリームによって、図B-2に示すようなページが生成されます。
図B-2 出力ストリームの結果例
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved