【问题标题】:Tomcat - Redirect to Error Page when ServletContextListener failsTomcat - ServletContextListener 失败时重定向到错误页面
【发布时间】:2011-02-24 18:45:26
【问题描述】:

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

此时如何将用户重定向到自定义错误页面?我在我的 web.xml 中尝试了以下内容(我在原始文件中有 括号):
(错误页面)
(错误代码404/错误代码)
(位置/file_not_found.html/位置)
(/error-page)

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

谢谢 维克

【问题讨论】:

  • 您不必输入 HTML(尽管您可以),并且可以使用包含 0 和 1 的按钮来转义代码。
  • 嗨,亚历山大。我不太明白你的意思。你能在评论中发布一个例子吗?
  • 欢迎来到 SO。首先阅读 -> stackoverflow.com/editing-help。当您提出或编辑问题时,在编辑区域的顶部,有几个图标。所有这些都自动键入编辑帮助中描述的内容。此外,如果答案有助于解决您的问题,则习惯上接受或赞成答案。
  • 感谢您提供指向编辑页面的链接。我看过常见问题解答但没有看到那个页面,我显然也错过了图标。我是 SO 新手,还不能投票,但我只是将您的答案设置为我接受的答案。再次感谢您的帮助。
  • 没问题,愉快的编码。还有一件事,如果您以@UserName 开始您的评论(例如此评论开头的@Vic),那么它将引起该用户的注意,您可能会更快地收到对您问题的回复。跨度>

标签: java tomcat


【解决方案1】:

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

因此,如果要处理半死状态,则需要从半死状态开始。幸运的是,如果你安装了一个过滤器,你的 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

【讨论】:

  • 再次感谢亚历山大。这看起来对我有用。我会从您提供的链接开始进一步调查。
猜你喜欢
  • 2019-10-01
  • 2014-02-20
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2020-01-12
  • 2010-12-16
相关资源
最近更新 更多