サーブレットと JSP

JRun では、サーブレットと JSP を使用してサーバサイド Java アプリケーションを作成できます。JSP は JRun によってサーブレットに変換されるため、次のようなネイティブサーブレットに使用できるオブジェクトの多くは、本質的に JSP にも使用できます。

次のページでは、これらのオブジェクトについて説明します。上記オブジェクトの使用方法の詳細については、『JRun プログラマーガイド』を参照してください。

HTTP リクエストとレスポンス

サーブレットは、HTTP リクエストがサーブレットを Java サーブレットとして直接的に参照した場合、または JSP ファイルとして間接的に参照した場合に起動されます。サーブレットは HTTP リクエストに保管された情報にアクセスし、その情報を処理してから、結果を HTTP レスポンスの一部としてクライアントに返します。次の図は、HTTP リクエストおよびレスポンスの構造を示しています。

HTTP リクエストには、クライアントからサーブレットに送信された情報が含まれています。たとえば、サーブレットがフォームによって起動されると、サーブレットは、その処理を行う前に、リクエストに保管されているフォームデータにアクセスする必要があります。フォームデータには、ユーザー、データベースに書き込まれた登録情報、またはユーザーのショッピングカートに追加された製品情報の検証に使用されるログイン情報が含まれています。

HTTP リクエスト情報には次の方法でアクセスできます。

サーブレットは、HTTP レスポンスを構築し、そのレスポンスをクライアントに返すことによって、リクエストに応じます。サーブレット内で、HTTP レスポンスにアクセスし、クライアントに返されたレスポンス内の情報を書き込みます。

HTTP レスポンス情報には次の方法でアクセスできます。

HTTP レスポンスには、クライアントへの結果の返送に使用する出力ストリームが含まれます。

クライアントへの結果の返送

サーブレットで、リクエストクライアントにダイナミックコンテンツを返すことができます。出力は、サーブレットが計算する情報またはサーブレットに渡された情報に基づいて生成されます。たとえば、サーブレットはフォーマットされたデータベースデータを返すために、渡されたフォーム属性を、 request オブジェクトを用いてアクセスして、使用することができます。一方、アプリケーションにユーザープリファレンスを維持するメソッドがある場合は、保管されているプリファレンスに基づき、サーブレットでブラウザの表示色を設定できます。

HTTP レスポンスを使用して、次の方法で情報を返します。

サーブレットフィルタの使用

Servlet 2.3 仕様により、前処理および後処理のための HTTP リクエストおよびレスポンスオブジェクトへのアクセスを提供するサーブレットフィルタが使用できるようになりました。フィルタは、サーバに送信される前にリクエストオブジェクトを処理したり、サーバからクライアントに返される間にレスポンスオブジェクトを処理したりします。また、フィルタは、チェーン内で呼び出すこともできるため、チェーン内のフィルタ間でリクエストやレスポンスをやり取りできます。フィルタを使用すると、次のタスクを実行できます。

フィルタの使用方法の詳細については、『JRun プログラマーガイド』を参照してください。

イベントリスナの使用

Java Servlet 2.3 仕様の主な新機能の 1 つに、サーブレットイベントリスナの追加があります。この仕様では、Web アプリケーション用のリスナクラスについて規定しています。イベントリスナはイベントハンドラとも呼ばれ、特定のイベントの発生時に JRun が呼び出すコールバックメソッドが用意されています。イベントリスナを使用すると、Web アプリケーションのさまざまな要素を管理し、ServletContext および HttpSession オブジェクト内のステートの変化を追跡できます。

ServletContext および HttpSession オブジェクトのアクティビティを監視するサーブレットイベントリスナには 2 つの基本タイプがあります。次の表に示すように、これらのタイプにはそれぞれ、リスナインターフェイスと属性リスナインターフェイスがあります。
サーブレット
オブジェクト
関連付けられているリスナインターフェイス
ServletContext
ServletContextListener
ServletContextAttributeListener
HttpSession
HttpSessionListener
HttpSessionAttributeListener

イベントリスナは、次のようなタスクのほか、多くの一般的なタスクに使用します。

イベントリスナの使用方法の詳細については、『JRun プログラマーガイド』を参照してください。

例外処理

例外とは、サーブレット内で検出されるエラーのことです。例外は、JRun によって JSP が Java クラスファイルに変換されるとき、またはサーブレットが実行されるときに発生する可能性があります。

例外は次の方法で表します。

ページコンテキスト情報の維持

JSP の pageContext オブジェクトは、JSP にローカルに情報を保管するメカニズムを提供します。JRun では、ページのリクエストごとに新規 pageContext オブジェクトが作成されます。このオブジェクトは、ページが起動すると作成され、ページが終了すると廃棄されます。pageContext オブジェクトのメソッドを使用すると、JSP の情報にアクセスしたり、他のアクションを実行したりすることができます。

Java サーブレットには、これに相当するオブジェクトはありません。

セッションの処理

HTTP はステートレスプロトコルです。Web サーバは、リクエストを受け取ってレスポンスを返すと、クライアントとの接続を終了します。Web サーバにはクライアントの情報は維持されません。そのため、同じクライアントから別のリクエストがきても、それを判断することはできません。Web サイトからクライアントやそのナビゲーションを追跡できないことが、Web サイトにおける複雑なトランザクションの実行を困難にしています。

ただし、JRun では session オブジェクトがサポートされており、これを使用すると、Web サーバとの対話中にユーザーを追跡できます。session オブジェクトを使用して、ショッピングするユーザーを追跡し、その登録情報や優先情報を送ることができます。ユーザーがサイトに接続するたびに、情報を再入力しなくても済むようにすることもできます。session オブジェクトは、ユーザーが Web サイトに接続している間、情報の保管および検索するための場所を 1 箇所提供します。

単純な実装ではユーザー名、セキュリティ保護されている実装ではユーザー名とパスワード、電子商取引システムではショッピングカートがアプリケーションに記憶されます。サーブレット API を使用しないアプリケーションの場合、通常はアプリケーション固有の保管メカニズムを使用してセッション情報を保管し、非表示のフォームフィールドまたは Cookie を通じてキー値をブラウザに返します。後続のリクエストでは、このキー値を使用して、以前に保存されたセッション情報を取得します。

Cookie はサーバに保管され、クライアントとサーバ間でやり取りされるセッション ID で参照されます。 Cookie は、サーバサイドのアプリケーションが個別のブラウザに情報を保存するために使用する一般的な手段です。サーバサイドアプリケーションでは、ブラウザに保管された Cookie を取り出すことができます。Cookie を使用すると、各ブラウザで使用する特殊変数を Web アプリケーションで作成できます。そのような変数にユーザー名または最後にアクセスした日付を含めることができます。Cookie によるセッション記録を有効にした場合、JRun は jsessionid という名前のセッショントラッキング Cookie を作成します (JMC で Cookie の名前を指定することもできます)。Cookie は、ステートレスである HTTP プロトコルを補完するパーシスタンスメカニズムを提供します。

セッション情報には次の方法でアクセスできます。

アプリケーションコンテキストの追跡

コンテキストオブジェクトを使用すると、アプリケーション情報を保管したり、アプリケーションのさまざまなコンポーネント間で情報を共有できます。

たとえば、アプリケーションが、複数のサーブレット (Java で書かれたものと JSP として書かれたもの)、HTML ページ、および他のサーバサイドコンポーネントで構成されているとします。これらのアプリケーションコンポーネント間でのやり取りを可能にするために、アプリケーションコンテキストオブジェクトを使用して、その情報を保管したり、取り出したりすることができます。コンテキストオブジェクトを介して使用できる情報には、次のものがあります。

アプリケーション情報には次の方法でアクセスできます。

設定情報へのアクセス

JRun は、初期化時にサーブレットに設定情報を渡します。設定情報には、初期化パラメータを示す名前/値のペア、およびサーブレットが実行されるコンテキストを示す servletConfig オブジェクトが含まれています。

設定情報には次の方法でアクセスできます。