2013年6月27日木曜日

ServletにてHTTPエラーを返す方法

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の既存のエラー画面を使用しておりますが、独自のエラー画面を作成し、反映させるとより使いやすいユーザインターフェイスになると思います。

サンプルコードの結果画面

Written By : // 10:05
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。

Blog Archive

Powered by Blogger.