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