Apache Tomcat 上的自定义错误页面

Mr *_*eph 4 tomcat custom-errors

我正在运行带有 2 个自定义 servlet 的 Apache Tomcat 服务器。树结构看起来像:

$CATALINA_HOME/webapps/
         ROOT/
           WEB-INF/
         servlet1/
           META-INF/
           WEB-INF/
         servlet2/
           META-INF/
           WEB-INF/
Run Code Online (Sandbox Code Playgroud)

我正在尝试为每个 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>
Run Code Online (Sandbox Code Playgroud)

error.html$CATALINA_HOME/webapps/ROOT/. 这似乎不起作用。当我输入“www.server.com/servlet1/SomRandomStuff以获取 404 时,会显示一个空白页面,而不是 error.html。当我调用 servlet 而不将正确的信息传递给它时,还会发生其他事情,浏览器会询问我是否要下载文件。
我我试过error.html不放在ROOT而是放在 servlet1 目录上。没有工作。我检查了error.html具有正确的权限,没关系。我没有想法,我在网上找到的几个教程非常模糊。

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

感谢您的帮助。

小智 5

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

 <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>
Run Code Online (Sandbox Code Playgroud)

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

如果它们与 web.xml 位于同一文件夹中,您可以通过这种方式尝试 ./error.html

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