Java Servletのウェルカムページとエラーページ
ウェルカムページ
ディレクトリだけを指定してアクセスしてきた場合に表示するページ。
web.xml に下記のように記述する。
<web-app> ... <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>test.jsp</welcome-file> </welcome-file-list> ... </web-app>
welcome-file 要素は複数記述できる。もし複数ファイルが存在した場合には、welcome-file-list 要素内で一番上に定義されているものが表示する。
エラーページ
エラーページは、HTTPエラーや例外が発生した時に表示するページのこと。エラーページの設定もweb.xmlで行う。HTTPエラーや例外の種類に応じて、表示させるページを変えることができる。
web.xml に error-page 要素を記述する。error-page要素は welcome-file-list 要素の後、tag lib 要素の前に記述すること。
<web-app> ... </welcome-file-list> <error-page> <error-code>403</error-code> <location>/WEB-INF/403.html</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/WEB-INF/error.jsp</location> </error-page> <taglib> ... </web-app>
ステータスコードの分類
頻繁に表示される可能性のある、以下のエラーコードについてはエラーページを用意しておく。
- 401 Unauthorized: 認証が必要である。Basic認証やDigest認証などを行うときに使用される。たいていのブラウザはこのステータスを受け取ると、認証ダイアログを表示する。
- 403 Forbidden: 禁止されている。リソースにアクセスすることを拒否された。リクエストはしたが処理できないという意味。アクセス権がない場合や、ホストがアクセス禁止処分を受けた場合などに返される。例: 社内(イントラネット)からのみアクセスできるページに社外からアクセスしようとした。
- 404 Not Found: 指定したページが見つからない。単に、アクセス権がない場合などにも使用される。
- 500 Internal Server Error: サーバ内部エラー。サーバ内部にエラーが発生した場合に返される。例として、CGIとして動作させているプログラムに文法エラーがあったり、設定に誤りがあった場合などに返される。
500 Internal Server Error 時のレスポンスについて
サーバ内部エラー発生時に 500 Internal Server Error を返却するのはセキュリティ上好ましくない(※)ため、403 Forbidden を返却するようにする。
※「任意のパラメータを送るとサーバ内部エラーが発生する」ことが外部からわかると攻撃対象になりうる
<%@ page trimDirectiveWhitespaces="true"%> <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <% // 返却するステータスに 403 Forbidden を設定 response.setStatus(HttpServletResponse.SC_FORBIDDEN); // セッションを破棄 session.invalidate(); // エラーページ /WEB-INF/403.html にフォワードする request.getRequestDispatcher("/WEB-INF/403.html").forward(request, response); %>