12.3.2 Servletの変更点
(1) Servlet 3.0の非サポートAPIの扱い
アプリケーションサーバ Version 11およびDeveloper Version 11では,Version 9で非サポートだった一部のServlet 3.0 APIが新たにサポート対象になりました。そのため,アプリケーションサーバ Version 9では該当するAPIを使用するとUnsupportedOperationException例外がスローされる仕様となっていましたが,アプリケーションサーバ Version 11およびDeveloper Version 11ではServlet 3.0仕様に従って動作します。
該当するAPIを次の表に示します。もし,これらのAPIから常にUnsupportedOperationException例外がスローされることを期待しているアプリケーションだった場合は,例外がスローされない前提の実装となるようにアプリケーションの改修が必要です。
パッケージ |
クラス |
メソッド |
---|---|---|
javax.servlet |
AsyncContext |
すべてのメソッド |
AsyncListener |
すべてのメソッド |
|
ServletRequest |
startAsync |
|
isAsyncStarted |
||
isAsyncSupported |
||
getAsyncContext |
||
getDispatcherType |
||
AsyncEvent |
すべてのメソッド |
|
ServletRequestWrapper |
startAsync |
|
isAsyncStarted |
||
isAsyncSupported |
||
getAsyncContext |
||
getDispatcherType |
||
Registration |
setAsyncSupported |
また,アプリケーションサーバVersion 11およびDeveloper Version 11で引き続き非サポートとなるAPIについても,アプリケーションサーバ Version 9およびDeveloper Version 9ではUnsupportedOperationException例外がスローされていましたが,アプリケーションサーバ Version 11およびDeveloper Version11ではデフォルトでは例外がスローされません。該当するAPIを次の表に示します。
パッケージ |
クラス |
メソッド |
webserver.servlet_api.unsupported.throwUnsupportedOperationExceptionの指定値に対する動作 |
|
---|---|---|---|---|
false(デフォルト) |
true |
|||
javax.servlet |
ServletContext |
getJspConfigDescriptor |
nullが返ります |
UnsupportedOperationException例外がスローされます |
もし,これらのAPIから常にUnsupportedOperationException例外がスローされることを期待しているアプリケーションだった場合は,例外がスローされない前提の実装となるようにアプリケーションを改修するか,または次の定義をJ2EEサーバ用ユーザプロパティに追加してください。
webserver.servlet_api.unsupported.throwUnsupportedOperationException=true
(2) コンテキストルートにマッピングする動的サーブレット追加処理について
アプリケーションサーバ Version 9およびDeveloper Version 9では,javax.servlet.ServletRegistrationのaddMappingメソッドの引数にコンテキストルートを示す”/”を指定した場合,すでにデフォルトサーブレットがマッピング済みであるためにマッピングの上書きができませんでした。
アプリケーションサーバ Version 11およびDeveloper Version 11では,同一ServletContextに対して1度だけ,コンテキストルートに対するマッピングを上書きできます。これによって,デフォルトサーブレットの代わりにユーザ定義サーブレットをコンテキストルートにマッピングできます。
もし,アプリケーションサーバ Version 11およびDeveloper Version 11の動作を期待しておらず,addMappingメソッドがマッピングの上書きを拒否することを期待しているアプリケーションだった場合,コンテキストルートにマッピングするaddMappingメソッドの呼び出しをしないようにアプリケーションの改修が必要です。アプリケーションを改修しないでアプリケーションサーバ Version11およびDeveloper Version 11に移行すると,デフォルトサーブレットへのマッピングがユーザサーブレットへのマッピングに上書きされるおそれがあります。