Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)

[目次][用語][索引][前へ][次へ]

6.2.3 Servlet 3.0仕様で追加,変更された仕様についての注意事項

Servlet 3.0仕様で追加,変更された仕様を,アプリケーションサーバ上で使用するときの注意事項を示します。Servlet 3.0仕様およびServlet 2.5仕様については,それぞれの仕様書(Servlet 3.0仕様書,Servlet 2.5仕様書)を参照してください。

<この項の構成>
(1) Servlet 3.0とアプリケーションサーバの機能を組み合わせた場合の仕様
(2) Servlet 3.0とCDIを組み合わせた場合について
(3) APIで定義したフィルタまたはリスナと,@PostConstructアノテーションまたは@PreDestroyアノテーションを組み合わせた場合について
(4) インクルード時に対象のコンテンツがない場合について
(5) エスケープシーケンスの使用について
(6) 動的サーブレット定義について
(7) ファイルアップロードについて
(8) 静的リソースの配置について
(9) APIについて
(10) web.xmlの省略について
(11) セッションIDを示すHTTP Cookie名の変更について
(12) Webアプリケーションで使用できるHTTP Cookie名
(13) <servlet-class>要素に指定するクラスについて
(14) <filter-class>要素に指定するクラスについて
(15) セッションIDを示すHTTP CookieのPath属性の変更について
(16) セッションIDを示すHTTP CookieのPath属性とDomain属性に使用できる文字について

(1) Servlet 3.0とアプリケーションサーバの機能を組み合わせた場合の仕様

Servlet 3.0で追加された機能と,アプリケーションサーバの機能を組み合わせた場合の仕様について説明します。

(a) Webプリケーションのバージョン設定機能

Webアプリケーションのバージョン設定機能で,バージョンとして3.0は設定できません。

(b) META-INF/resources以下のJSP事前コンパイル

Servlet 3.0仕様では,JSPファイルをJARファイルの中のMETA-INF/resourcesの階層に含めることができるようになりましたが,META-INF/resources内にJSPを含むWebアプリケーションの場合,JSPの事前コンパイルは実行できません。JSP事前コンパイルを実行した場合,META-INF/resources内のJSPは事前コンパイルされないで,リクエスト実行時にエラーとなります。

(c) Servlet 3.0を使用したアプリケーションのリロード

Servlet 3.0仕様の機能を使用したアプリケーションをリロードする場合,次の制約があります。

META-INF/resourcesに静的コンテンツ(JSPも含む)を持つJARファイルを含むアプリケーションの場合,JARファイルを更新してリロードしても,JARファイルのMETA-INF/resources内の静的コンテンツは更新前のものにしかアクセスできません。META-INF/resourcesに静的コンテンツを持つJARファイルを含むアプリケーションをリロードした場合,KDJE39556-Wが出力されます。

注意
09-00-02より前のバージョンの場合,次のアプリケーションをリロードしたときの動作は保証されません。
  • ServletContainerInitializerインタフェースの実装クラスを含むアプリケーションの場合。
    リロードした場合,KDJE39557-Wが出力されます。
  • 動的サーブレット定義で追加したサーブレット,フィルタまたはリスナを含むアプリケーションの場合。
    リロードした場合,KDJE39558-Wが出力されます。
(d) APIで定義したサーブレットでのrun-as機能

APIで定義したサーブレットでrun-as機能を使用できません。次の設定をした場合,無視されます。

(e) APIで定義したサーブレットまたはフィルタの実行時間の監視

APIで定義したサーブレットまたはフィルタでは,J2EEアプリケーションの実行時間の監視機能を使用できません。cosminexus.xmlに<method-observation-timeout>タグが設定されていても無視されます。

(f) Webアプリケーションの呼び出し時のHTTPセッションの継続

Webアプリケーションの呼び出し時のHTTPセッションの継続については,Servlet 2.5仕様の場合と同じ動作となります。詳細は,「6.2.4(6) Webアプリケーションの呼び出し時のHTTPセッションの継続について」を参照してください。

(g) セッションのクッキー名を変更した場合のリダイレクタでのリクエストの振り分け

Webコンテナがクラスタ構成で配置される場合に,リダイレクタを使用してリクエストを振り分けることができます。リダイレクタは,各リクエストに付加されたセッションIDを参照して,同一のWebクライアントから来たリクエストが同一のWebコンテナに転送されるように,リクエストを振り分けます。ただし,セッションのクッキー名をデフォルトの「JSESSIONID」からほかの名称に変更した場合,同一のWebクライアントから来たリクエストを同一のWebコンテナに転送する動作は保証されません。

(h) アノテーション参照抑止機能

Servlet3.0で追加されたアノテーションのうち,@HandlesTypesアノテーションはアノテーション参照抑止機能の対象になりません。アノテーション参照抑止機能が有効な場合でも処理されます。

(2) Servlet 3.0とCDIを組み合わせた場合について

Servlet 3.0とCDIを組み合わせて使用する場合,Servlet 3.0に対応したweb.xmlを使用してください。これ以外のバージョンのweb.xmlとCDIを組み合わせて使用できません。

(3) APIで定義したフィルタまたはリスナと,@PostConstructアノテーションまたは@PreDestroyアノテーションを組み合わせた場合について

APIで定義したフィルタまたはリスナでは,@PostConstructアノテーションまたは@PreDestroyアノテーションを使用できません。これらのアノテーションを使用した場合,無視されます。

(4) インクルード時に対象のコンテンツがない場合について

Servlet 3.0仕様では,インクルードの対象がデフォルトサーブレット(静的コンテンツを提供するためにコンテナが用意しているサーブレット)で,対象のコンテンツがない場合,FileNotFoundException例外をスローすることになっています。また,その例外がユーザプログラムで処理されなかった場合,レスポンスはコミットされないで,ステータスコード500を返すことなっています。

アプリケーションサーバでは,この仕様はサポートされません。08-70以前のバージョンと同様にステータスコード404が返されます。

(5) エスケープシーケンスの使用について

Servlet 3.0で新規に追加されたAPIやプロパティの入力文字に,エスケープシーケンス(\b,\t,,\n,\f,\r,\",\',\\)を使用しないでください。使用した場合,ログが途中で改行されるなど,表示が不正になることがあります。

(6) 動的サーブレット定義について

動的サーブレット定義について,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。

(a) サーブレット,フィルタ,またはリスナの定義
(b) ServletContainerInitializerインタフェースを使用した定義

アプリケーションサーバでのServletContainerInitializerインタフェースを使用した定義について,Servlet 3.0仕様と次の点が異なります。

また,javax.servlet.ServletContainerInitializerファイルに定義する,ServletContainerInitializerインタフェースの実装クラスの情報は,次のように読み込まれます。

(7) ファイルアップロードについて

ファイルアップロードについて,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。

(8) 静的リソースの配置について

静的リソースの配置について,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。

(9) APIについて

APIについて,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。

(10) web.xmlの省略について

Servlet 3.0では,次のアプリケーションの場合,web.xmlを省略できます。

(11) セッションIDを示すHTTP Cookie名の変更について

セッションIDを示すHTTP Cookie名を変更する場合,Cookie名に「csfcfc」を指定できません。

また,使用できる文字に次の条件があります。条件に違反した場合,KDJE39559-Wが出力されます。セッションの不正な動作の原因になることがあるため,条件に合った文字を使用してください。

(12) Webアプリケーションで使用できるHTTP Cookie名

WebアプリケーションでHTTP Cookieを使用する場合,次の名称を指定できません。なお,大文字と小文字は区別されません。

(13) <servlet-class>要素に指定するクラスについて

web.xmlの<servlet-class>要素を省略する場合,@WebServletアノテーションを指定したjavax.servlet.http.HttpServletのサブクラスをWebアプリケーションに含め,name属性に<servlet-class>要素を省略したサーブレットのサーブレット名を設定する必要があります。該当するHttpServletクラスがない場合は,KDJE39339-Eが出力され,サーブレットクラスのロードに失敗します。

(14) <filter-class>要素に指定するクラスについて

web.xmlの<filter-class>要素を省略する場合,@WebFilterアノテーションを指定したjavax.servlet.Filterの実装クラスをWebアプリケーションに含め,filterName属性に<filter-class>要素を省略したフィルタのフィルタ名を設定する必要があります。該当するFilterクラスがない場合は,KDJE39340-Eが出力され,アプリケーションの開始に失敗します。

(15) セッションIDを示すHTTP CookieのPath属性の変更について

セッションIDを示すHTTP CookieのPath属性を変更する場合,別のWebアプリケーションとセッションIDを示すHTTP Cookie名やPath属性が重複すると,HTTP CookieのセッションIDを示す値が上書きまたは削除されるなどの理由で,HTTPセッションが正しく引き継がれなくなることがあります。

(16) セッションIDを示すHTTP CookieのPath属性とDomain属性に使用できる文字について

セッションIDを示すHTTP CookieのPath属性とDomain属性に使用できる文字には次の条件があります。条件に違反した場合,KDJE39559-Wが出力されます。セッションの不正な動作の原因になることがあるため,条件に合った文字を使用してください。