Tomcat不会重定向到400错误的请求自定义错误页面

时间:2018-10-15 10:24:09

标签: tomcat redirect bad-request tomcat9

我们有生产中的tomcat 9 Web服务器。我们面临的问题是,如果tomcat收到如下所示的格式错误的URL,我们希望为应用程序显示自定义错误页面

http://URL/|

http://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错误请求错误页面,而不是自定义错误页面。

4 个答案:

答案 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