Tomcat 9Webサーバーが本番環境にあります。私たちが直面している問題は、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エラーコードに正しく対応するエラーページが表示されます。
本当の問題は、ユーザーがブラウザに不正な形式のURLを入力したときにTomcatがerror.htmlにリダイレクトできないことです http:// URL/
Tomcatは、カスタムエラーページではなく、デフォルトの400の不正な要求エラーページを表示しています。
以下は、他の誰かの時間を節約するために https://stackoverflow.com/a/55702749/253271 に従うサンプル構成です。 Hostタグ内のserver.xml内:
<Valve className="org.Apache.catalina.valves.ErrorReportValve"
errorCode.400="webapps/ROOT/error400.html"
errorCode.0="webapps/ROOT/errorOthers.html"
showReport="false"
showServerInfo="false" />
静的htmlerror400.html ... errorOthers.htmlをCATALINA_BASEのwebapps/ROOTに配置します。
あなたはあなた自身のエラーページを書くことができます https://aspiresoftware.in/blog/catalinatomcat-custom-error-report-Valve-to-handle-errors-exceptions/
JarをTomcatlibに配置する必要があります。
組み込み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