問題
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ページに転送されます。