methodの javadoc をinit()注意深く読んでください。
初期化
public void init() throws ServletException
...
スロー:
ServletException- サーブレットの通常の操作を中断する例外が発生した場合
そこを見てください、あなたはそれを として再スローすることになっていServletExceptionます。サーブレット API 仕様の 2.3.2.1 章に準拠すると、サーブレットはサービスに配置されません。
2.3.2.1 初期化時のエラー条件
初期化中に、サーブレット インスタンスはUnavailableExceptionまたは
をスローできますServletException。この場合、サーブレットをアクティブなサービスに配置してはならず、サーブレット コンテナーによって解放する必要があります。初期化の失敗と見なされるため、destroy メソッドは呼び出されません。
...
したがって、ドキュメントの状態を実行するだけです(これは通常のプロセスです。ちなみに、Javaの初心者として、それが非常に優れていることを理解/認識する必要があります):
@Override
public void init() throws ServletException {
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (Exception e) {
throw new ServletException("Error creating security controller", e);
}
maxFileSize = getBytes(10);
maxMemSize = getBytes(2);
}
super.init()不要な電話は削除しましたのでご了承ください。init()javadoc は、 に対してのみそれを行う必要があることをどこにも伝えていませんinit(ServletConfig)。
具体的な問題とは関係ありませんが、過度に一般的なcatchonを持つことは、Exception悪い習慣と見なされます。プログラマーの間違いやバグを意図せずに隠してしまう可能性があるためRuntimeException、過度に一般的なcatchon でsをカバーしたくないことは確かです。Exception
でできるだけ具体的にするようにしてください。これらのメソッドcatchで宣言されている例外をできるだけ具体的にキャッチしてください。throws例えば:
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (SecurityControllerCreationException e) {
throw new ServletException("Error creating security controller", e);
}
別の原因として、問題のメソッドの設計が非常に悪く、それ自体が として宣言されていることも考えられthrows Exceptionます。その部分も同様に修正する必要があります。