Web業務アプリケーションを開発する上で、サーブレットでのエラーをthrowで送るのではなく、HTTPステータスを適切にセットすることで、エラーを表現したい場合がある。
例えば、ブラウザからAjax通信時でHTTPステータスによって処理を振り分けたい時や、エラー内容に独自の値(業務で使用するエラーコードなど)を含めて送る時に使用すると便利である。
ここでは、サーブレットでHTTPステータスのエラーを返す方法をメモとして記載したいと思います。
前提条件
- Windows XP Pro 32bit
- Servlet3.0
- java 1.7.XX
- JBoss As 7.1.1 final
サーブレットでエラーを返す方法
HttpServletResponseにsendErrorでステータスをセットすることで可能である。setStatusにステータスコードをセットするだけでは、エラーにならないので注意が必要である。
サンプルコードは以下に記載します。
package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name="SetError", urlPatterns={"/SetError"}) public class SampleSetError extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("エラー"); out.println("</body></html>"); //HTTP 500 Internal Server Error(内部エラー) response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "エラーがでました"); //これだとエラーとして認識されないので注意が必要である。 //response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } }
実行結果
実行結果は以下のようになります。サンプルはJBossの既存のエラー画面を使用しておりますが、独自のエラー画面を作成し、反映させるとより使いやすいユーザインターフェイスになると思います。
サンプルコードの結果画面 |
0 コメント:
コメントを投稿