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 コメント:
コメントを投稿