Interstage Studio プログラマーズガイド |
目次 索引 |
第2部 Java編 | > 第3章 Webアプリケーションを開発する | > 3.3 Webアプリケーションのプログラミングについて |
ここでは、サーブレットを開発する上で知っておきたい情報の基礎を説明します。
サーブレットでは、以下のようにリスナを利用してオブジェクトのイベントを監視し、対処することができます。
オブジェクト |
イベント |
リスナインタフェースとイベントクラス |
---|---|---|
Webコンテキスト |
初期化/終了 |
javax.servlet.ServletContextListener |
属性の追加/削除/置換 |
javax.servlet.ServletContextAttributeListener |
|
セション |
作成/無効化 |
javax.servlet.http.HttpSessionListener |
属性の追加/削除/置換 |
javax.servlet.http.HttpSessionAttributeListener |
上記については、リスナクラスを作成して、そのクラスをWebアプリケーション環境定義(web.xml)に登録する必要があります。
また、上記以外にも、セションに関連付けるオブジェクトで実装することでイベントの通知を受けることができるリスナも用意されています。
Webコンポーネント(サーブレットやJSP)は、スコープオブジェクトの属性として管理されるオブジェクトを通じて情報を共有することができます。
スコープオブジェクトには、以下の種類があります。共有するオブジェクトは、スコープオブジェクトのクラスのgetAttribute/setAttributeメソッドでアクセスします。
スコープ |
クラス |
範囲 |
---|---|---|
アプリケーション |
javax.servlet.ServletContext |
WebアプリケーションのすべてのサーブレットやJSPから共有できます。 |
セション |
javax.servlet.http.HttpSession |
セション内で共有できます。ユーザ情報などのオブジェクトを共有するときに使用します。 |
リクエスト |
javax.servlet.http.HttpServletRequest |
複数のサーブレットやJSPでリクエストを処理する時にオブジェクトを共有したい場合に使用します |
ページ |
javax.servlet.jsp.PageContext |
JSPの場合のみ。ページ内で有効なオブジェクトとして管理します。 |
アプリケーションオブジェクトやセションオブジェクトは、複数のスレッドからアクセスされる可能性があります。そのため、属性として管理するオブジェクトについてもスレッドセーフにしておく必要があります。
すべてのサーブレットは、javax.servlet.Servletインタフェースを実装する必要があり、主なインタフェースのメソッドは、以下になります。
ただし、HTTPサーブレットを作成するためにabstractクラスが用意されています。そのクラス(javax.servlet.http.HttpServlet)を継承してサーブレットを作成する場合、serviceメソッドを実装する代わりに、そのサーブレットでサポートする要求メソッド(GETやPOST)に合わせたdoXXXXメソッドを実装する必要があります。
doGetメソッドやdoPostメソッドでは、通常は以下のような順に処理を実装します。
また、要求に対する応答を自分だけでは行わずに他のWebリソースを呼び出したり、他のWebコンポーネントへ要求を転送することもできます。そうする場合には、Webコンテキストもしくは要求オブジェクトからRequestDispatcherオブジェクトを取得して行います。
要求オブジェクトからパラメタ値を取り出す場合には、入力フォームのWebコンポーネントの文字コードを意識した取得処理をする必要があります。下記に説明するフィルタを利用し、文字コードを意識したパラメタの取得処理を共通化することもできます。
要求と応答に対してフィルタによって、ヘッダやコンテンツを変換することができます。通常は、認証、ロギング、データ変換などのために使用されます。
フィルタを作成するには、javax.servlet.Filterインタフェースを実装し、Webアプリケーション環境定義(web.xml)でフィルタを適用するURLやサーブレットにマッピングする必要があります。
目次 索引 |