Tomcat - 当ServletContextListener失败时重定向到错误页面

时间:2010-05-27 17:15:44

标签: java tomcat

当Tomcat启动时,它调用我的ServletContextListener来获取数据库连接,稍后我将在其他servlet中使用getServletContext()。它在我的web.xml中被称为:
listener
listener-class org.ppdc.database.DBCPoolingListener /listener-class
/listener>
(我删除了<>因为它们无法在此消息中正确显示。>
如果我在Tomcat启动时无法连接到数据库,则会收到404错误,因为Tomcat无法启动该应用程序。

此时如何将用户重定向到自定义错误页面?我在我的web.xml中尝试了以下内容(我原来的<>括号):
    (错误页)
        (误差code404 /出错码)
        (位置/ file_not_found.html /位置)
    (/ error-page)

有关如何在Tomcat尝试启动应用程序时将用户重定向到我的错误页面的任何想法?

由于 维克

1 个答案:

答案 0 :(得分:1)

如果您的应用程序无法加载,那就是它。 Tomcat没有运行它,也不提供错误页面。

因此,如果你想处理半死状态,你需要从半死状态开始。幸运的是,如果安装了Filter,那么servlet中的代码可以检查应用程序是否已经半死,在控制转移到任何servlet之前执行此操作。

在web.xml中声明一个过滤器:

<filter>
  <filter-name>IsHalfDeadFilter</filter-name>
  <filter-class>my.package.IsHalfDeadFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>IsHalfDeadFilter</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>

然后实施doFilter方法以重定向到您的错误页面。

@Override
public void doFilter (
        final ServletRequest request,
        final ServletResponse response,
        final FilterChain chain
    ) throws
        IOException,
        ServletException
{
    if ( isHalfDead )
    {
        // redirect to error page
        return;
    }

    chain.doFilter( request, response );
}

详细了解过滤器here