You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9.0.37:如何将通用错误页面放置在ROOT目录外?

解决Tomcat全局共享自定义错误页的问题

你的配置错误点

  1. 全局conf/web.xml的<error-page>路径问题:
    这里的<location>是相对于每个Web应用的上下文根,你把errors文件夹放在Tomcat根目录(与conf同级)时,每个应用都无法访问到这个路径,只有当errors在某个应用(比如ROOT)下时,/errors/...才会被该应用的Servlet容器解析。

  2. ErrorReportValve的相对路径问题:
    Valve配置中的相对路径是相对于Tomcat的Host的appBase(默认是webapps目录),你写的errors/error_404.html会被解析为webapps/errors/error_404.html,而不是Tomcat根目录下的errors,这就是为什么放在ROOT下才有效(/errors/...会映射到ROOT应用下的errors)。

两种正确实现方案

方案一:用ErrorReportValve配置绝对路径(直接使用Tomcat根的errors文件夹)

修改conf/server.xml中的Valve配置,使用绝对文件路径(注意系统差异):

  • Linux/macOS环境:
<Valve className="org.apache.catalina.valves.ErrorReportValve"
       error.400="file:///opt/tomcat/errors/error_400.html"
       error.404="file:///opt/tomcat/errors/error_404.html"
       showReport="false"
       showServerInfo="false" />
  • Windows环境:
<Valve className="org.apache.catalina.valves.ErrorReportValve"
       error.400="file:///C:/tomcat/errors/error_400.html"
       error.404="file:///C:/tomcat/errors/error_404.html"
       showReport="false"
       showServerInfo="false" />

这种方式无需修改conf/web.xml,Valve会直接返回指定的静态错误页,对所有部署的应用生效。

方案二:配置全局共享上下文(让所有应用可访问errors文件夹)

  1. 在conf/Catalina/localhost目录下创建errors.xml文件,内容如下:
    • Linux/macOS:
    <Context docBase="/opt/tomcat/errors" path="/errors" reloadable="false" />
    
    • Windows:
    <Context docBase="C:/tomcat/errors" path="/errors" reloadable="false" />
    
  2. 保留conf/web.xml中的<error-page>配置:
<error-page>
   <error-code>404</error-code>
    <location>/errors/error_404.html</location>
</error-page>

此配置会将/errors路径全局映射到Tomcat根目录的errors文件夹,所有应用的错误页请求都会指向这个共享资源。可以删除server.xml中的ErrorReportValve配置(若同时存在,Valve的优先级更高)。

注意事项

  • 确保errors文件夹及其下的HTML文件拥有Tomcat进程的读取权限。
  • 修改配置后必须重启Tomcat才能生效。
  • 方案二中的path="/errors"不能与现有应用的上下文路径冲突。

内容的提问来源于stack exchange,提问作者Erik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:15:03