Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)
Servlet 2.5仕様で追加,変更された仕様を,アプリケーションサーバ上で使用するときの注意事項を示します。Servlet 2.5仕様およびServlet 2.4仕様については,それぞれの仕様書(Servlet 2.5仕様書,Servlet 2.4仕様書)を参照してください。
アプリケーションサーバでは,Servlet 2.5仕様に従ってweb.xmlのXMLスキーマが変更されています。
Servlet 2.5仕様では,web.xmlの省略について記述が追加されています。
アプリケーションサーバでは,WebアプリケーションがJSPおよび静的コンテンツしか含まない場合,web.xmlを省略できます。web.xmlが省略されたWebアプリケーションのバージョンは2.5と見なされます。また,web.xmlを省略した場合,WEB-INFディレクトリを省略できます。
ここではweb.xml省略時の注意事項について説明します。web.xmlの省略については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「11.4.5 web.xmlを省略したWebアプリケーションに対する操作」を参照してください。
サーブレット,およびフィルタはweb.xmlにマッピング定義が必要なため,web.xmlを省略すると動作しません。
次に示すリスナはweb.xmlに定義が必要なため,web.xmlを省略すると動作しません。
ただし,次に示すリスナはweb.xmlに定義しないため,web.xmlを省略しても動作します。
また,タグライブラリでリスナが定義されている場合,web.xmlを省略してもリスナは実行されます。
web.xmlを省略した場合,サーバ管理コマンドおよび属性ファイルを使用したプロパティの設定はできません。
web.xmlを省略した場合でも,拡張子がjspおよびjspxのファイルのマッピング,デフォルトのwelcomeファイル,セッションタイムアウト,およびデフォルトのmime-mappingの設定は有効です。サーブレットのデフォルトマッピングの有効または無効の設定に関係なく,サーブレットのデフォルトマッピングは使用できません。
web.xmlを省略したWebアプリケーションではフィルタを使用できません。そのため,HTTPレスポンス圧縮機能やメモリセッションフェイルオーバ機能など,built-inフィルタが必要な機能は使用できません。
Servlet 2.5仕様で定義されたweb.xmlのスキーマでは,<load-on-startup>要素に指定できる値が変更されました。
アプリケーションサーバでは,<load-on-startup>要素に指定できる値はweb.xmlに記述するServlet仕様のバージョン情報に対応したサーブレットに従って制御されます。サーブレットのバージョンごとに<load-on-startup>要素に指定できる値について次の表に示します。
表6-16 <load-on-startup>要素に指定できる値
サーブレットのバージョン | 指定できる値 |
---|---|
Servlet 2.5 | 整数,または空文字列。空文字列が指定された場合,<load-on-startup>要素が指定されなかった場合と同様に,サーブレットのロードを行わない。 |
Servlet 2.4 | 整数。07-60と同様の指定値。 |
なお,指定できない値を指定した場合,J2EEアプリケーションのインポートに失敗します。
Servlet 2.5仕様で定義されたweb.xmlのスキーマでは,<security-constraint><web-resource-collection>要素内の<http-method>要素に指定できる内容について変更されました。指定できる内容について次の表に示します。
表6-17 <security-constraint><web-resource-collection>要素内の<http-method>要素に指定できる内容
サーブレットのバージョン | 指定できる内容 |
---|---|
Servlet 2.5 | 半角英数字(0-9,A-Z,a-z)および特殊文字(! # $ % & ' * + - . ^ _ ` | ~)を1回以上。 |
Servlet 2.4 | GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACEのどれか。 |
<security-constraint><web-resource-collection>要素内の<http-method>要素に指定するのは,リクエストのHTTPメソッドです。
アプリケーションサーバでサポートするリクエストのHTTPメソッドは,web.xmlに記述するServlet仕様のバージョン情報に対応したサーブレットでサポートする内容と同じです。ただし,Servlet 2.5仕様に準拠したWebアプリケーションでサポートするリクエストのHTTPメソッドは,使用するWebサーバによって異なります。アプリケーションサーバでサポートするリクエストのHTTPメソッドについて,Webサーバごとに次に示します。
表6-18 アプリケーションサーバでサポートするリクエストのHTTPメソッド
サーブレットのバージョン | 使用するWebサーバ | 指定できる内容 |
---|---|---|
Servlet 2.5 | HTTP ServerおよびMicrosoft IIS | HTTP1.1で使用可能なメソッドの一部※。 |
インプロセスHTTPサーバ | HTTP1.1で使用可能なすべてのメソッド。 | |
Servlet 2.4 | HTTP Server,Microsoft IIS,インプロセスHTTPサーバ | GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACEのどれか。 |
注※ 指定できるメソッドの詳細については「付録A.2 リダイレクタが返すエラーステータスコード」を参照してください。
指定できない値を指定した場合,J2EEアプリケーションのインポートに失敗します。
アプリケーションサーバでは,Servlet 2.5仕様で規定されたアノテーションをサポートします。アノテーションの使用については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「12. アノテーションの使用」を参照してください。
Servlet 2.5仕様では,クロスコンテキストで呼び出されたサーブレットおよびJSP内でセッションを作成した場合,次のどちらの場合もセッションが継続するように記述が追加されています。
しかし,アプリケーションサーバでは,Webアプリケーションの呼び出し時のHTTPセッションの継続はできません。
Servlet 2.5仕様では,web.xmlの<filter-mapping>要素内の<servlet-name>要素での*(半角アスタリスク)の指定について記述が追加されています。
web.xmlの<filter-mapping>要素内の<servlet-name>要素で*を指定することで,すべてのサーブレットへのリクエストをフィルタ呼び出しの対象にできます。
web.xmlでの定義例を次に示します。
<filter-mapping> <filter-name>All Filter</filter-name> <servlet-name>*</servlet-name> </filter-mapping>
この例では,すべてのサーブレットへのリクエストに対してフィルタ名「All Filter」のフィルタが呼び出されます。
アプリケーションサーバでは,web.xmlの<filter-mapping><servlet-name>要素で*(半角アスタリスク)を指定した場合,該当するweb.xmlを含むWebアプリケーションへのすべてのリクエストがフィルタ呼び出しの対象となります。
Servlet 2.5仕様では,javax.servlet.ServletRequestインタフェースのgetReaderメソッドが呼び出されたあと,setCharacterEncodingメソッドの呼び出しが無効になることについて明記されました。
アプリケーションサーバでは,サーブレットのバージョンに関係なく,Servlet 2.5仕様に従います。getReaderメソッド呼び出し後のsetCharacterEncodingメソッドの呼び出しは無効となり,次の内容は変更されません。
07-60以前は,getReaderメソッド呼び出し後のsetCharacterEncodingメソッドの呼び出しによってgetCharacterEncodingメソッドの戻り値が変更されていましたが,08-00では,サーブレットのバージョンに関係なく,変更されません。
Servlet 2.5仕様では,forward先でjavax.servlet.http.HttpServletRequestインタフェースのgetRequestURLメソッドが呼び出された場合に戻り値となるURLについて,クライアントに指定されたURLのパスではなく,javax.servlet.RequestDispatcherオブジェクトを取得するために使用したパスが反映されることが明記されました。
アプリケーションサーバでは,web.xmlに記述するServlet仕様のバージョン情報に対応したサーブレットに従って,戻り値となるURLを決定します。
Servlet 2.5仕様では,javax.servlet.RequestDispatcherオブジェクトを取得するために呼び出したjavax.servlet.ServletRequestインタフェースのgetRequestDispatcherメソッドの引数に指定したパスが戻り値となります。Servlet 2.4仕様では,リクエストのURLのパスが戻り値となります。
Servlet 2.5仕様では,無効化されたjavax.servlet.http.HttpSessionオブジェクトのgetIdメソッドが呼び出された場合にjava.lang.IllegalStateException例外がスローされる仕様が削除されました。
アプリケーションサーバでは,無効化されたjavax.servlet.http.HttpSessionオブジェクトのgetIdメソッドが呼び出された場合の戻り値は,web.xmlに記述するServlet仕様のバージョン情報に対応したサーブレットに従って制御されます。
Servlet 2.5仕様の場合はセッションID,Servlet 2.4仕様の場合は07-60と同様にnullが戻り値となります。
サーブレットのバージョンが異なるWebアプリケーション間でクロスコンテキストを呼び出した場合,呼び出し元と呼び出し先のサーブレットのバージョンによって,呼び出し先の動作が異なるメソッドがあります。サーブレットのバージョンが異なるWebアプリケーション間でのクロスコンテキストの呼び出しをした場合のクロスコンテキストの呼び出し先の動作について,メソッドごとに表に示します。
表6-19 サーブレットのバージョンが異なるWebアプリケーション間でのクロスコンテキストの呼び出し先の動作(javax.servlet.http.HttpServletRequestインタフェースのgetRequestURLメソッド)
Webアプリケーションのサーブレットのバージョン | クロスコンテキストの呼び出し先の動作 | 参照先 | |
---|---|---|---|
呼び出し元 | 呼び出し先 | ||
Servlet 2.5 | Servlet 2.4以前 | Servlet 2.5仕様に従う。 | 6.2.4(9) |
Servlet 2.4以前 | Servlet 2.5 | Servlet 2.4仕様に従う。 |
表6-20 サーブレットのバージョンが異なるWebアプリケーション間でのクロスコンテキストの呼び出し先の動作(無効化されたjavax.servlet.http.HttpSessionオブジェクトのgetIdメソッド)
Webアプリケーションのサーブレットのバージョン | クロスコンテキストの呼び出し先の動作 | 参照先 | |
---|---|---|---|
呼び出し元 | 呼び出し先 | ||
Servlet 2.5 | Servlet 2.4以前 | Servlet 2.5仕様に従い,セッションIDを返す。 | 6.2.4(10) |
Servlet 2.4以前 | Servlet 2.5 | Servlet 2.4仕様に従い,nullを返す。 |
Servlet 2.5仕様では,include先のサーブレットでのレスポンスヘッダの設定について,getSessionの場合だけ設定が有効となります。ただし,アプリケーションサーバでは,Servlet 2.4を使用した場合でも,getSessionでのレスポンスヘッダの設定は有効になります。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.