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