Apache Tomcat 上的自定义错误页面

Apache Tomcat 上的自定义错误页面

我正在运行带有 2 个自定义 servlet 的 Apache Tomcat 服务器。树结构如下所示:

$CATALINA_HOME/webapps/
         ROOT/
           WEB-INF/
         servlet1/
           META-INF/
           WEB-INF/
         servlet2/
           META-INF/
           WEB-INF/

我正在尝试为每个 servlet 添加一个自定义错误 html 页面,该页面将在出现错误 400、404 以及 servlet 出现异常时显示(例如,应该在 http 请求中发送给 servlet 的信息不存在)

我补充说$CATALINA_HOME/webapps/servlet1/WEB-INF/web.xml

 <error-page>
   <error-code>400</error-code>
   <location>/error.html</location>
 </error-page>
 <error-page>
   <error-code>404</error-code>
   <location>/error.html</location>
 </error-page>
 <error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>/error.html</location>
 </error-page>

error.html在 中创建了$CATALINA_HOME/webapps/ROOT/。这似乎不起作用。当我输入“”时www.server.com/servlet1/SomRandomStuff,出现 404,显示的是空白页,而不是 error.html。当我调用 servlet 而没有向其传递正确的信息时,还会发生其他事情,浏览器会询问我是否要下载文件。
我试过error.html不放在ROOT而是放在 servlet1 目录中。没有用。我检查了error.html具有正确的权限,没问题。我没有主意了,我在网上找到的几个教程都很模糊。

我做错了什么?如何实现这一点 - 每个 servlet 显示一个自定义错误页面?

感谢您的帮助。

答案1

您的页面路径以斜杠开头:

 <error-page>
   <error-code>400</error-code>
   <location>**/error.html**</location>
 </error-page>
 <error-page>
   <error-code>404</error-code>
   <location>**/error.html**</location>
 </error-page>
 <error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>**/error.html**</location>
 </error-page>

在这种情况下,它可能会正在驱动器的根目录中寻找它们。

如果它们与 web.xml 位于同一文件夹中,您可以尝试以下方法./error.html

除此之外,我建议尝试文件的完整路径:/var/www/error/error.html无论您的情况如何。

答案2

捕获 404 错误,将www.server.com/servlet1/SomRandomStuff您的 error.html 文件移动到$CATALINA_HOME/webapps/servlet1/error.html。将错误文件复制到您的每个 webapp。虽然这不是处理此问题的最佳方法,但对我来说很有效。

答案3

您的错误文件应位于此目录中(而不是根目录中):

$CATALINA_HOME/webapps/servlet1

相关内容