アプリケーションの設計
サーブレットを書くサーブレットを書き込むには、Java コンパイラとサーブレット API が必要です。どちらも Sun Microsystems の Web サイト http://java.sun.com から入手できます。コンパイラと他の基本ツールが入っている Java Development Kit (JDK) と、サーブレット API 仕様、サーブレット .JAR ファイル (jsdk.jar)、およびサーブレットサンプルが入っている Java Servlet Development Kit (JSDK) をダウンロードしてください。Sun のサイトでは、前述のリンク以外にも、Web 上の他のサーブレットリソースへのリンクがあります。 一般に使用されているさまざまな Java 開発環境を使ってサーブレットを書くこともできます。開発者にとって便利なように、jsdk.jar のコピーが、IBM(R) Lotus Domino(R) Server と IBM(R) Lotus Domino Designer(R) のインストールキットに含まれています。jsdk.jar のコピーは、Sun の JSDK で提供されているファイルと同じ内容です。
Sun は JDK と JSDK を定期的に更新しています。Lotus Domino Designer Release 6 は、JDK 1.3 と JSDK 2.0 をサポートします。Lotus Domino 四半期メンテナンスリリース (QMR) には、しばしば Sun のアップグレードが組み込まれているので、QMR リリース情報で、サポートされている JDK と JSDK のバージョンを確認してください。
Lotus Domino のサーブレットサポートを有効にするサーブレットは、HTTP サーバータスクの一部である Lotus Domino Java Servlet Manager によってロードされ、呼び出されます。 サーブレットのランタイム Java サポートは、Lotus Domino Java Virtual Machine (JVM) が行います。 HTTP タスクは、開始されると自動的に Servlet Manager を起動し JVM をロードします。HTTP タスクは、これらの処理のステータスメッセージを、サーバーコンソールとログファイルに書き込みます。 Servlet Manager は、Domino ディレクトリのサーバー文書の設定によって管理されます。その設定は、サーバー文書の [インターネットプロトコル] - [Domino Web Engine] タブにあります。メソッドには次のものがあります。
Lotus Domino Servlet Manager:HTTP タスクは、JVM と Servlet Manager の両方をロードします。
サードパーティ製サーブレットサポート:HTTP タスクは JVM はロードしますが、Lotus Domino Servlet Manager はロードしません。これにより、IBM の WebSphere Application Server のようなサードパーティ製 Servlet Manager の使用が可能になります。
例:
相対ディレクトリパス:domino\servlet
絶対ディレクトリパス:c:\apps\MyServlets
JAR ファイル:c:\javamail\mail.jar
ZIP ファイル:domino\servlet\sql.zip
メモ HttpSession インターフェースサポートは、Lotus Domino での「HTTP セッション認証」機能とは完全に分離されています。
無効:セッションが非活動かどうかはチェックされません。
無効:(デフォルト) すべてのセッションデータは、HTTP タスクの終了時に破棄されます。
サーブレットのプロパティを設定する個々のサーブレットの特殊なプロパティは、Lotus Domino のデータディレクトリにある servlets.properties というテキストファイルで指定できます。次のプロパティの指定方法を説明します。
servlet(s).<name>.<property>=<value(s)>
ディレクティブには大文字小文字を区別があります。servlets.properties ファイルには、空白行と「#」で始まるコメント行も含めることができます。servlets.properties ファイルはオプションです。サーブレットのデフォルトのプロパティは、別名なし、初期化引数なし、拡張子マッピングなし、必要時サーブレットのロード、です。
サーブレットの別名別名ディレクティブの構文は次のとおりです。 servlet.<alias-name>.code=<class-name>
次に例を示します。
servlet.SQLQuery.code=sql.database.query.Servlet
セキュリティのため Lotus Domino ではサーブレット URL 内のサーブレット名にピリオド (.) を含めることはできません。これは、悪意のユーザーが Servlet Manager を介して不正な Java パッケージのクラスをロードするのを防止するためです。サーブレットにパッケージ名がある場合は、別名を割り当てる必要があります。上記の例では、「sql.database.query.Servlet」というサーブレットを http://acme.com/servlet/SQLQuery?month=june のような URL で起動できるようにします。別名はこの他にも、サーブレットの実際の名前をユーザーから隠したい場合にも有効です。
1 つのサーブレットに複数の別名を割り当てることもできます。Servlet Manager は、各別名を参照する最初の URL を受け取ると、サーブレットの新しいインスタンスを作成します。Servlet Manager は、新しいインスタンスが作成されると、サーブレットの init() メソッドを呼び出します。プロパティファイルの他のディレクティブで別名が使用できるので、インスタンスごとに異なるプロパティを与えることができます。たとえば、別名ごとに個別の初期化引数ディレクティブを指定できます。また、複数のインスタンスがされる場合でもサーブレットクラスは一度だけロードされるので、サーブレットのインスタンスは静的クラス変数を使ってデータを共有できます。
セキュリティ機能としてサーブレットの別名を使うと、サーブレットを、URL のクラス名では直接参照できなくなります。これによってサーブレットの本当の名前を非表示にすることができます。
初期化引数サーブレットの初期データはプロパティファイルで指定できます。サーブレットは、ServletConfig.getInitParameter メソッドを使ってデータにアクセスできます。初期化ディレクティブの構文は次の通りです。 servlet.<alias or class name>.initArgs=<name1=value1>,<name2=value2>,...
カンマで区切ることにより、複数の引数を指定できます。次に例を示します。
servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30
URL 拡張子マッピングURL 拡張子マッピングディレクティブの構文は次のとおりです。 servlet.<alias or class name>.extension=<extension> <extension> ...
1 つのサーブレットに複数の拡張子を与えることができます。拡張子同士の間にはスペースを 1 つ置いて分離します。サーバーレコード内の [サーブレットファイル拡張子] 設定の中にも、すべての拡張子を含めなくてはなりません。たとえば、URL 拡張子「sql」または「sq」を指定したときに必ず Lotus Domino が SQLQuery サーブレットを呼び出すようにするには、「sql,sq」をサーバー設定に追加し、次のディレクティブをプロパティファイルに追加してください。
servlet.SQLQuery.extension=sql sq
これによって、ユーザーは次のような URL でサーブレットを起動できます。
http://acme.com/query.sql?month=june
起動時にロードするデフォルトでは、Servlet Manager は、サーブレットを参照する URL が最初に受信されたときに、サーブレットのクラスファイルをメモリにロードします。しかし、Servlet Manager のスタート時に 1 つ以上のサーブレットを直ちにロードするよう指定できます。これによって、サーブレットが初めて URL から要求されたとき、ユーザーが遅れを感じるのを防ぐことができます。 スタートアップディレクティブの構文は次のとおりです。
servlets.startup=<alias or class> <alias or class> ...
“servlets”は複数のサーブレットを示します。各サーブレット名の間にはスペースが必要なことに注意してください。
サーブレットに 1 つ以上の別名を与えた場合、スタートアップディレクトリに別名を含めることができます。これにより、Servlet Manager にサーブレットクラスをロードさせ、別名ごとに 1 つのインスタンスを作成させることができます。
Servlet Manager がサーブレットのクラスをロードすると、それらのクラスは、Lotus Domino HTTP タスクがコンソールコマンド「tell http quit」によって停止されるか、コンソールコマンド「tell http restart」によって再始動されるまでメモリに常駐します。サーブレットをアンロードする前に、Servlet Manager は、サーブレットの各インスタンスに対して destroy() メソッドを呼び出します。これにより各インスタンスのリソースをクリーンアップできます。
JVM クラスローダーによってロードされたクラスは、HTTP タスクが停止されるまで残ります。「tell http restart」コマンドはクラスをアンロードしません。
プロパティファイルの例servlets.properties ファイルの例を次に示します。 # Properties for the sql servlet servlet.SQLQuery.code=sql.database.query.Servlet servlet.SQLQuery.initArgs=cache=30 servlet.SQLQuery.extension=sql # Properties for the mail servlet servlet.MailServlet.initArgs=mime=enabled,smime=disabled # Both servlets should be loaded at startup servlets.startup=SQLQuery MailServlet # end of file 例 関連項目