Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)
Servlet 3.0仕様で追加,変更された仕様を,アプリケーションサーバ上で使用するときの注意事項を示します。Servlet 3.0仕様およびServlet 2.5仕様については,それぞれの仕様書(Servlet 3.0仕様書,Servlet 2.5仕様書)を参照してください。
Servlet 3.0で追加された機能と,アプリケーションサーバの機能を組み合わせた場合の仕様について説明します。
Webアプリケーションのバージョン設定機能で,バージョンとして3.0は設定できません。
Servlet 3.0仕様では,JSPファイルをJARファイルの中のMETA-INF/resourcesの階層に含めることができるようになりましたが,META-INF/resources内にJSPを含むWebアプリケーションの場合,JSPの事前コンパイルは実行できません。JSP事前コンパイルを実行した場合,META-INF/resources内のJSPは事前コンパイルされないで,リクエスト実行時にエラーとなります。
Servlet 3.0仕様の機能を使用したアプリケーションをリロードする場合,次の制約があります。
META-INF/resourcesに静的コンテンツ(JSPも含む)を持つJARファイルを含むアプリケーションの場合,JARファイルを更新してリロードしても,JARファイルのMETA-INF/resources内の静的コンテンツは更新前のものにしかアクセスできません。META-INF/resourcesに静的コンテンツを持つJARファイルを含むアプリケーションをリロードした場合,KDJE39556-Wが出力されます。
APIで定義したサーブレットでrun-as機能を使用できません。次の設定をした場合,無視されます。
APIで定義したサーブレットまたはフィルタでは,J2EEアプリケーションの実行時間の監視機能を使用できません。cosminexus.xmlに<method-observation-timeout>タグが設定されていても無視されます。
Webアプリケーションの呼び出し時のHTTPセッションの継続については,Servlet 2.5仕様の場合と同じ動作となります。詳細は,「6.2.4(6) Webアプリケーションの呼び出し時のHTTPセッションの継続について」を参照してください。
Webコンテナがクラスタ構成で配置される場合に,リダイレクタを使用してリクエストを振り分けることができます。リダイレクタは,各リクエストに付加されたセッションIDを参照して,同一のWebクライアントから来たリクエストが同一のWebコンテナに転送されるように,リクエストを振り分けます。ただし,セッションのクッキー名をデフォルトの「JSESSIONID」からほかの名称に変更した場合,同一のWebクライアントから来たリクエストを同一のWebコンテナに転送する動作は保証されません。
Servlet3.0で追加されたアノテーションのうち,@HandlesTypesアノテーションはアノテーション参照抑止機能の対象になりません。アノテーション参照抑止機能が有効な場合でも処理されます。
Servlet 3.0とCDIを組み合わせて使用する場合,Servlet 3.0に対応したweb.xmlを使用してください。これ以外のバージョンのweb.xmlとCDIを組み合わせて使用できません。
APIで定義したフィルタまたはリスナでは,@PostConstructアノテーションまたは@PreDestroyアノテーションを使用できません。これらのアノテーションを使用した場合,無視されます。
Servlet 3.0仕様では,インクルードの対象がデフォルトサーブレット(静的コンテンツを提供するためにコンテナが用意しているサーブレット)で,対象のコンテンツがない場合,FileNotFoundException例外をスローすることになっています。また,その例外がユーザプログラムで処理されなかった場合,レスポンスはコミットされないで,ステータスコード500を返すことなっています。
アプリケーションサーバでは,この仕様はサポートされません。08-70以前のバージョンと同様にステータスコード404が返されます。
Servlet 3.0で新規に追加されたAPIやプロパティの入力文字に,エスケープシーケンス(\b,\t,,\n,\f,\r,\",\',\\)を使用しないでください。使用した場合,ログが途中で改行されるなど,表示が不正になることがあります。
動的サーブレット定義について,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。
アプリケーションサーバでのServletContainerInitializerインタフェースを使用した定義について,Servlet 3.0仕様と次の点が異なります。
webserver.ServletContainerInitializer_jar.include.path
また,javax.servlet.ServletContainerInitializerファイルに定義する,ServletContainerInitializerインタフェースの実装クラスの情報は,次のように読み込まれます。
ファイルアップロードについて,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。
表6-14 ファイルアップロードを実施するリクエストのタイプと実行結果
web.xmlまたは@MultipartConfigアノテーションを指定したリクエストのタイプ | 実行結果 |
---|---|
mime-multipart以外 | javax.servlet.ServletException例外がスローされます。 |
multipart/form-data以外のmime-multipart | javax.servlet.ServletException例外がスローされます。 |
multipart/form-data | ファイルアップロードが実行されます。例外は発生しません。 |
静的リソースの配置について,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。
APIについて,アプリケーションサーバで使用した場合にServlet 3.0仕様と異なる点について説明します。
表6-15 非サポートのAPI(Servlet 3.0)
項番 | パッケージ | クラス | インタフェース/クラス | メソッド | 機能 |
---|---|---|---|---|---|
1 | javax.servlet | AsyncContext | インタフェース | すべてのメソッド | 非同期サーブレット |
2 | AsyncListener | インタフェース | すべてのメソッド | 非同期サーブレット | |
3 | ServletContext | インタフェース | getJspConfigDescriptor | JSP | |
4 | ServletRequest | インタフェース | startAsync | 非同期サーブレット | |
5 | isAsyncStarted | 非同期サーブレット | |||
6 | isAsyncSupported | 非同期サーブレット | |||
7 | getAsyncContext | 非同期サーブレット | |||
8 | getDispatcherType | 非同期サーブレット | |||
9 | AsyncEvent | クラス | すべてのメソッド | 非同期サーブレット | |
10 | ServletRequestWrapper | クラス | startAsync | 非同期サーブレット | |
11 | isAsyncStarted | 非同期サーブレット | |||
12 | isAsyncSupported | 非同期サーブレット | |||
13 | getAsyncContext | 非同期サーブレット | |||
14 | getDispatcherType | 非同期サーブレット | |||
15 | Registration | インタフェース | setAsyncSupported | 非同期サーブレット | |
16 | javax.servlet.descriptor | JspConfigDescriptor | インタフェース | すべてのメソッド | JSP |
17 | JspPropertyGroupDescriptor | インタフェース | すべてのメソッド | JSP | |
18 | TaglibDescriptor | インタフェース | すべてのメソッド | JSP |
Servlet 3.0では,次のアプリケーションの場合,web.xmlを省略できます。
セッションIDを示すHTTP Cookie名を変更する場合,Cookie名に「csfcfc」を指定できません。
また,使用できる文字に次の条件があります。条件に違反した場合,KDJE39559-Wが出力されます。セッションの不正な動作の原因になることがあるため,条件に合った文字を使用してください。
WebアプリケーションでHTTP Cookieを使用する場合,次の名称を指定できません。なお,大文字と小文字は区別されません。
web.xmlの<servlet-class>要素を省略する場合,@WebServletアノテーションを指定したjavax.servlet.http.HttpServletのサブクラスをWebアプリケーションに含め,name属性に<servlet-class>要素を省略したサーブレットのサーブレット名を設定する必要があります。該当するHttpServletクラスがない場合は,KDJE39339-Eが出力され,サーブレットクラスのロードに失敗します。
web.xmlの<filter-class>要素を省略する場合,@WebFilterアノテーションを指定したjavax.servlet.Filterの実装クラスをWebアプリケーションに含め,filterName属性に<filter-class>要素を省略したフィルタのフィルタ名を設定する必要があります。該当するFilterクラスがない場合は,KDJE39340-Eが出力され,アプリケーションの開始に失敗します。
セッションIDを示すHTTP CookieのPath属性を変更する場合,別のWebアプリケーションとセッションIDを示すHTTP Cookie名やPath属性が重複すると,HTTP CookieのセッションIDを示す値が上書きまたは削除されるなどの理由で,HTTPセッションが正しく引き継がれなくなることがあります。
セッションIDを示すHTTP CookieのPath属性とDomain属性に使用できる文字には次の条件があります。条件に違反した場合,KDJE39559-Wが出力されます。セッションの不正な動作の原因になることがあるため,条件に合った文字を使用してください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.