我可以将通用错误文件夹不放在 /ROOT 文件夹中,而是放在其他地方吗?
我正在运行带有多个应用程序的本地 Tomcat 服务器(9.0.37),类似于下面的文件夹结构
tomcat/
conf/
web.xml
server.xml
webapps/
ROOT/
WEB-INF/
app1/
META-INF/
WEB-INF/
web.xml
app2/
META-INF/
WEB-INF/
web.xml
我正在尝试创建一些自定义错误页面来取代默认的 Tomcat 错误页面;可以被所有应用程序共享的通用的。
我已经咨询过 a few other examples 并创建了一个
/errors
文件夹,其中包含我的错误页面的 HTML,以及修改 tomcat/conf/web.xml
<error-page>
<error-code>404</error-code> <!-- Not Found -->
<location>/errors/error_404.html</location>
</error-page>
和
tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.ErrorReportValve"
error.400="errors/error_400.html"
error.404="errors/error_404.html" showReport="false"
showServerInfo="false" />
这里的问题是,在部署并模拟 404 错误之后,我只得到了“Page Not Found”行。
我的
/errors
文件夹最初停放在 tomcat/
下(基本上与 conf/
处于同一水平),但我将其移动以尝试找出此问题的原因。
在我的文件夹路径中移动后,发现两个 XML 文件中的设置(或者至少基于我所看到的
conf/web.xml
)似乎指向 conf/webapps/ROOT/errors
。
换句话说,如果我将我的
/errors
文件夹添加到conf/webapps/ROOT/
,它就可以工作。这与我上面找到的答案一致。
这不是我想要的。我不希望我的错误文件夹位于 ROOT 文件夹中,而是位于另一个更通用的路径中,如上面
/tomcat
下所述
我什至尝试过类似完整路径本身的东西
<error-page>
<error-code>404</error-code> <!-- Not Found -->
<location>/apache-tomcat-9.0.37/webapps/errors/error_404.html</location>
</error-page>
我仍然收到“找不到页面”错误。
我也尝试过,根据上面链接的答案之一,以
./
开始路径
<error-page>
<error-code>404</error-code> <!-- Not Found -->
<location>./errors/error_404.html</location>
</error-page>
我得到的只是服务器抱怨 URL 必须以正斜杠('/')开头。
尝试
/../errors/error_404.html
也没有真正帮助。
我哪里出错了?
好吧......我发现我错在哪里了。
conf/server.xml
<Valve className="org.apache.catalina.valves.ErrorReportValve"
error.400="errors/error_400.html"
error.404="errors/error_404.html" showReport="false"
showServerInfo="false" />
错误.404 -> 错误代码.404
错误.400 -> 错误代码.400
不确定我是否读错了文档,或者我阅读文档的网站语法错误,但是一旦我更改了它,我的问题或多或少就得到了解决。这不仅根据我的需要引用了基本
/tomcat
目录中的错误页面,而且还允许引用其他文件夹,例如 /tomcat/webapps
。