404エラーコードがSpring MVCで動作していません

問題

Spring MVCアプリケーションでは、404エラーコードが正しく設定されています。

次のweb.xmlスニペットを参照してください。

File:web.xml

<web-app ...>

  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>** .htm</url-pattern>
  </servlet-mapping>

 //...
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/pages/404.htm</location>
  </error-page>

</web-app>

ただし、ユーザーが存在しないリソースにアクセスすると、404.htm ** の代わりに空白のページが表示されます。

解決策

404エラーコードは正しく設定されていますが、 " .htm "拡張機能は " サーブレットコンテナ "とSpringの " DispatcherServlet "の間の 衝突 を処理します。これを解決するには、404.htmを別のファイル拡張子、たとえば404.jspに変更してみてください。

File:web.xml

<web-app ...>

  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>** .htm</url-pattern>
  </servlet-mapping>

 //...
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/pages/404.jsp</location>
  </error-page>

</web-app>

今、ユーザーが存在しないリソースにアクセスすると、今すぐ404.jspページに転送されます。