仔细阅读方法的javadocinit()
:
在里面
public void init() throws ServletException
...
抛出:
ServletException
- 如果发生中断 servlet 正常操作的异常
看那里,你应该把它重新扔为ServletException
. 符合Servlet API 规范第 2.3.2.1 章,该 servlet 不会投入服务:
2.3.2.1 初始化错误条件
在初始化期间,servlet 实例可以抛出一个UnavailableException
或一个
ServletException
. 在这种情况下,servlet 不得置于活动服务中,必须由 servlet 容器释放。不调用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()
电话。javadoc 没有告诉任何地方您需要init()
为init(ServletConfig)
.
与具体问题无关,过于笼统catch
的 onException
被认为是不好的做法。您当然不想RuntimeException
用过于通用的方式覆盖 s,catch
因为Exception
这可能会无意中隐藏程序员的错误/错误。
您应该尽可能具体地在您的 中,尝试尽可能具体地捕获在这些方法catch
中声明的异常。throws
例如:
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (SecurityControllerCreationException e) {
throw new ServletException("Error creating security controller", e);
}
另一个原因也可能是所讨论的方法设计得非常糟糕,以至于它们本身被声明为throws Exception
. 您也应该反过来修复该部分。