8.2.3 Servlet 4.0仕様で追加,変更された仕様についての注意事項
Servlet 4.0仕様で追加,変更された仕様を,アプリケーションサーバ上で使用するときの注意事項を示します。
- 〈この項の構成〉
(1) APIについて
Servlet 4.0仕様で追加されたAPIを使用できます。APIの詳細については,Servlet 4.0の仕様書を参照してください。
(2) HTTP/2の注意事項
-
J2EEサーバのNIO HTTPサーバ機能は,HTTPS通信をサポートしていないため,HTTP/1.1以前と同様にHTTP/2でHTTPS通信をする場合にも,J2EEサーバのフロントにリバースプロキシなどのHTTP/2に対応した製品を配置する必要があります。アプリケーションサーバ11-40に含まれているHTTP ServerはHTTP/2に対応していますが,サーバープッシュは非サポートです※。このため,J2EEサーバ上のHttpServletRequest#newPushBuilder()メソッドはnullを返します。サーバープッシュが無効な場合のHttpServletRequest#newPushBuilder()メソッドの動作の詳細は,Javadocを参照してください。サーバープッシュを有効にするには,別途サーバープッシュに対応したリバースプロキシ製品を用意する必要があります。
- 注※
-
HTTP ServerのHTTP/2サポート範囲については,マニュアル「HTTP Server」を参照してください。
-
HTTP/2で,javax.servlet.ServletInputStream.isFinished()メソッドが,HTTP/2のストリームの状態によってはtrueにならない場合があります。
-
HTTP Trailerの上限値に達しても,javax.servlet.ServletInputStream.read()で例外が発生しない場合があります。例外が発生しない場合,javax.servlet.ServletInputStream.read()の戻り値が-1になるので,例外と合わせて戻り値を確認してください。
(3) Servlet Mapping APIの注意事項
web.xmlのservlet-mappingのurl-pattenに空文字を指定することはできません。空文字を指定した場合は,「/」に変換されます。このとき,HttpServletMapping APIのgetMappingMatch()の値はDEFAULTが設定されます。
なお,javax.servlet.ServletRegistrationインタフェースのaddMapping()メソッドを使用した場合は,空文字を指定した場合でも空文字が「/」に変換されません。その場合は,HttpServletMapping APIのgetMappingMatch()の値にはCONTEXT_ROOTが設定されます。
(4) デフォルトコンテキストパスの注意事項
cjaddappコマンドでの,default-context-pathの設定はサポートしていません。cjaddappコマンドにWARファイルを指定する場合,WARファイルに含まれるweb.xmlでデフォルトコンテキストパスを指定しても,無視されます。
(5) Webアプリケーション単位のデフォルト文字エンコーディングの設定の注意事項
Servlet 4.0から導入された,次のメソッドまたはタグに不正なエンコーディングを設定した場合,アプリケーションサーバの「デフォルトの文字エンコーディング設定機能」の指定があればその指定値,なければServletの仕様で規定された文字エンコーディングが設定されます。
-
javax.servlet.ServletContextインタフェースのsetRequestCharacterEncoding()メソッドもしくはsetResponseCharacterEncoding()メソッド
-
web.xmlの<web-app><request-character-encoding>タグもしくは<web-app><response-character-encoding>タグ
(6) HTTP Trailerの注意事項
java.servlet.http.HttpServletRequestインタフェースのsetTrailerFields()メソッドは,レスポンスがすでにコミットされているか,HTTP Trailerがサポートされていない(例えばHTTP/1.0や,HTTP/1.1のchunkedではない)場合にjava.lang.IllegalStateExceptionを投げる仕様ですが,アプリケーションサーバではchunkedかどうかに関係なく,次の条件の場合にjava.lang.IllegalStateExceptionをthrowします。
-
プロトコルがHTTP Trailerをサポートしていない(HTTP1.0である)。
-
HTTP1.1でレスポンスがすでにコミットされている。
(7) そのほかの注意事項
Servlet 3.0/JSP 2.2以降は,Webコンテナがweb.xmlと共にタグライブラリ・ディスクリプタ(TLDファイル)を解析してリスナを登録します。
addListener(Servlet 3.0以降)でリスナを登録した場合,「ServletContextListener#contextInitializedメソッド内で使用できないServletContextのメソッド」をTLDファイルで宣言したリスナで使用したとしても,java.lang.UnsupportedOperationExceptionは発生しません。