抛出java.lang.Error是否可以?

Abh*_*nia 7 java error-handling web-applications

我有一个进入Web应用程序的插件模块.如果模块没有正确加载,Web应用程序继续运行没有意义,Web应用程序可能根本不应该加载,我们希望此模块始终正确初始化.如果我要抛出一个运行时异常,它会进入日志,然后被忽略,因为应用程序无论如何都会继续,最终用户永远不会知道......我知道只有在特殊条件下才会抛出错误,它们通常与系统无法恢复的情况有关,但在这种情况下你会做什么?

Bal*_*usC 4

我在业务代码中经常使用的唯一一个 是. 在初始化块中你没有其他选择。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 错误。