Debian系统下Tomcat自定义错误页面的完整步骤
sudo apt update && sudo apt install tomcat9
安装最新版Tomcat 9)。myapp
应用对应路径为/var/lib/tomcat9/webapps/myapp/
)。error-pages
):sudo mkdir -p /var/lib/tomcat9/webapps/myapp/error-pages
sudo nano /var/lib/tomcat9/webapps/myapp/error-pages/404.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>404 - 页面未找到</title>
</head>
<body>
<h1>404 - 页面不存在</h1>
<p>抱歉,您访问的页面不存在或已被移除。</p>
<a href="/">返回首页</a>
</body>
</html>
按相同方式创建其他错误页面(如500.html
用于服务器内部错误)。/var/lib/tomcat9/webapps/ROOT/
)。error-pages
)并添加页面文件(步骤同上)。
注:全局配置的错误页面会被所有未单独配置的应用继承,但会被应用的
web.xml
覆盖。
web.xml
配置(精准控制)WEB-INF
目录(若不存在则创建):sudo mkdir -p /var/lib/tomcat9/webapps/myapp/WEB-INF
web.xml
文件(若不存在则新建):sudo nano /var/lib/tomcat9/webapps/myapp/WEB-INF/web.xml
<web-app>
标签内添加<error-page>
元素(以404、500错误为例):<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">
<!-- 其他配置 -->
<error-page>
<error-code>404</error-code>
<location>/error-pages/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error-pages/500.html</location>
</error-page>
<!-- 可添加更多错误代码(如403、503) -->
</web-app>
注:
<location>
路径需相对于Web应用的根目录(如/error-pages/404.html
对应error-pages/404.html
)。
server.xml
配置(可选补充)sudo nano /etc/tomcat9/conf/server.xml
<Host>
元素内添加<ErrorPage>
配置(以404为例):<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 其他配置 -->
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false"/>
<ErrorPage errorCode="404" location="/errorpages/404.html"/>
<ErrorPage errorCode="500" location="/errorpages/500.html"/>
</Host>
注:此方式需配合全局错误页面目录(如
/var/lib/tomcat9/errorpages/
)使用,且优先级低于web.xml
配置。
确保Tomcat用户(通常为tomcat
)能读取错误页面文件:
sudo chown -R tomcat:tomcat /var/lib/tomcat9/webapps/myapp/error-pages/
sudo chmod -R 755 /var/lib/tomcat9/webapps/myapp/error-pages/
执行以下命令重启Tomcat服务,使配置生效:
sudo systemctl restart tomcat9
通过浏览器访问不存在的页面(如http://服务器IP/myapp/nonexistent
),应显示自定义的404错误页面;触发服务器错误(如访问不存在的Servlet),应显示500错误页面。
注意事项:
web.xml
配置会覆盖全局设置。server.xml
中的showServerInfo="false"
设置。