我们有生产中的tomcat 9 Web服务器。我们面临的问题是,如果tomcat收到如下所示的格式错误的URL,我们希望为应用程序显示自定义错误页面
或
我在tomcat应用程序服务器的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>
,我们在tomcat的webapps目录中的应用程序ROOT文件夹中有error.html。
每当用户尝试请求任何不存在的网页时,他都会收到与上述404错误代码相对应的错误页面。
真正的问题是,当用户在浏览器中输入格式错误的网址(例如http://URL/|
时,tomcat无法重定向到error.html)Tomcat正在显示默认的400错误请求错误页面,而不是自定义错误页面。
答案 0 :(得分:4)
下面是https://stackoverflow.com/a/55702749/2532710之后的示例配置,以节省其他人的时间。 在server.xml中的Host标记内:
<Valve className="org.apache.catalina.valves.ErrorReportValve"
errorCode.400="webapps/ROOT/error400.html"
errorCode.0="webapps/ROOT/errorOthers.html"
showReport="false"
showServerInfo="false" />
将静态html error400.html ... errorOthers.html放入CATALINA_BASE的webapps / ROOT中。
答案 1 :(得分:1)
这不是错误,是配置问题。
Tomcat 9改进了错误处理,以便将更多错误(特别是那些在请求处理开始之前发生的错误)传递给标准错误处理机制,而不仅仅是返回错误代码。
在URI格式不正确的情况下,Tomcat无法解析URI,因此URI无法映射到Web应用程序。因此,Tomcat无法触发应用程序级错误处理,因为它无法识别应用程序。在这种情况下,错误由ErrorReportValve处理,该错误可以在server.xml中进行配置。
ErrorReportValve的最新功能是能够按照与每个Web应用程序错误页面配置类似的方式,根据状态代码和/或异常类型定义静态网页(即,没有Servlet或JSP,只有HTML)。
答案 2 :(得分:0)
您可以编写自己的错误页面 https://aspiresoftware.in/blog/catalinatomcat-custom-error-report-valve-to-handle-errors-exceptions/
您必须将jar放入tomcat lib。
答案 3 :(得分:0)
对于嵌入式Tomcat:
final var tomcat = new org.apache.catalina.startup.Tomcat();
final var host = (StandardHost) tomcat.getHost();
final var errorReportValve = new org.apache.catalina.valves.ErrorReportValve();
errorReportValve.setShowReport(false);
errorReportValve.setShowServerInfo(false);
errorReportValve.setProperty("errorCode.0", "empty.html");
host.addValve(errorReportValve);
http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/valves/ErrorReportValve.html