Abh*_*nia 7 java error-handling web-applications
我有一个进入Web应用程序的插件模块.如果模块没有正确加载,Web应用程序继续运行没有意义,Web应用程序可能根本不应该加载,我们希望此模块始终正确初始化.如果我要抛出一个运行时异常,它会进入日志,然后被忽略,因为应用程序无论如何都会继续,最终用户永远不会知道......我知道只有在特殊条件下才会抛出错误,它们通常与系统无法恢复的情况有关,但在这种情况下你会做什么?
我在业务代码中经常使用的唯一一个 是. 在初始化块中你没有其他选择。ErrorExceptionInInitializerErrorstatic
但即使您将其放入 Web 应用程序中,Web 应用程序仍会继续侦听 HTTP 请求。Filter最好的选择是在监听url-pattern中进行模块加载或初始化,/*并Filter相应地阻止 HTTP 请求。例如
private boolean allModulesAreLoaded;
@Override
public void init(FilterConfig config) {
try {
// Load modules.
allModulesAreLoaded = true;
} catch (Exception e) {
// Handle.
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (allModulesAreLoaded) {
chain.doFilter(request, response);
} else {
throw new ServletException("Not all modules are loaded.");
}
}
Run Code Online (Sandbox Code Playgroud)
这将在给定消息中产生 HTTP 500 错误。