我正在运行带有 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