Interstage Studio プログラマーズガイド
目次 索引 前ページ次ページ

第2部 Java編> 第3章 Webアプリケーションを開発する> 3.3 Webアプリケーションのプログラミングについて

3.3.1 サーブレットについて

ここでは、サーブレットを開発するうえで知っておきたい情報の基礎を説明します。

++イベント(リスナ)

サーブレットでは、以下のようにリスナを利用してオブジェクトのイベントを監視し、対処することができます。

オブジェクト

イベント

リスナインタフェースとイベントクラス

Webコンテキスト

初期化/終了

javax.servlet.ServletContextListener
javax.servlet.ServletContextEvent

属性の追加/削除/置換

javax.servlet.ServletContextAttributeListener
javax.servlet.ServletContextAttributeEvent

セション

作成/無効化

javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionEvent

属性の追加/削除/置換

javax.servlet.http.HttpSessionAttributeListener
javax.servlet.http.HttpSessionBindingEvent

上記については、リスナクラスを作成して、そのクラスを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メソッドでは、通常は以下のような順に処理を実装します。

  1. 要求オブジェクトからパラメタの値を取得する
  2. 応答オブジェクトにヘッダを設定する
  3. 応答オブジェクトから出力ストリームを取得して、応答オブジェクトに出力する

また、要求に対する応答を自分だけでは行わずに他のWebリソースを呼び出したり、他のWebコンポーネントへ要求を転送することもできます。そうする場合には、Webコンテキストもしくは要求オブジェクトからRequestDispatcherオブジェクトを取得して行います。

要求オブジェクトからパラメタ値を取り出す場合には、入力フォームのWebコンポーネントの文字コードを意識した取得処理をする必要があります。下記に説明するフィルタを利用し、文字コードを意識したパラメタの取得処理を共通化することもできます。

++フィルタ

要求と応答に対してフィルタによって、ヘッダやコンテンツを変換することができます。通常は、認証、ロギング、データ変換などのために使用されます。

フィルタを作成するには、javax.servlet.Filterインタフェースを実装し、Webアプリケーション環境定義(web.xml)でフィルタを適用するURLやサーブレットにマッピングする必要があります。


目次 索引 前ページ次ページ

Copyright 2007-2008 FUJITSU LIMITED