Javaに関する様々な情報をご紹介します。

1はじめてのServlet

Javaに関する様々な情報をご紹介します。

はじめてのServlet

このページでは、Servletプログラムを作成する上での基本事項について解説します。

HttpServletクラス

Servletプログラムに必要なインタフェース、クラスについて解説します。

javax.servlet.Servletインタフェース
Servletプログラムは直接的、もしくは間接的に必ずjavax.servlet.Servletインタフェースを実装している必要があります。javax.servlet.ServletインタフェースにはServletプログラムが必ず実装していなければいけないメソッドが定義されています。
javax.servlet.GenericServletクラス
javax.servlet.Servletインタフェースを実装したクラスで、プロトコルに依存しないServletプログラムを作成する際に使用します。
javax.servlet.http.HttpServletクラス
javax.servlet.GenericServletクラスを継承したクラスで、HTTPプロトコルベースのServletプログラムを作成する際に使用します。通常このクラスを継承してServletプログラムを作成します。HttpServletクラスは抽象クラスのため、このクラスを継承したServletプログラムは必ず1つのメソッドをオーバーライドする必要があります。

HttpServletクラス

Servletのライフサイクル

HttpServletクラスを継承したServletプログラムのライフサイクルについて解説します。

1.init( )メソッドの呼び出し
Servletプログラムに初めてリクエストが会ったときにサーブレットコンテナ(Tomcatなど)はServletプログラムを初期化します。その際にinitメソッドが呼び出されます。 そのため、データベースの接続などServletプログラムを実行する前に事前設定が必要な処理をinitメソッドに記述しておきます。initメソッドは初めてリクエストが会ったときに一度だけ呼び出されます。
2.service(HttpServletRequest, HttpServletResponse)メソッドの呼び出し
Servletプログラムにリクエストがあるたびにserviceメソッドが呼び出されます。serviceメソッドはリクエストのHTTPメソッドを解析し、対応するdoXxxメソッドを呼び出します。HTTPメソッドとはGETメソッドやPOSTメソッドのことです。
3.doXxx(HttpServletRequest, HttpServletResponse)メソッドの呼び出し
HttpServletクラスには以下のdoXxxメソッドが定義されています。HttpServletクラスを継承したServletプログラムは通常いずれかのdoXxxメソッドをオーバーライドします。通常はdoGetメソッドか、doPostメソッドをオーバーライドします。
※serviceメソッドをオーバーライドした場合は、doXxxメソッドは呼び出されません。呼び出す場合は、serviceメソッド内で意識的にdoXxxメソッドを呼び出す必要があります。
戻り型 メソッド 説明
protected void doDelete(HttpServletRequest, HttpServletResponse) リクエストのHTTPメソッドがDeleteメソッドであった場合に呼び出されるメソッドです。
protected void doGet(HttpServletRequest, HttpServletResponse ) リクエストのHTTPメソッドがGetメソッドであった場合に呼び出されるメソッドです。
protected void doHead(HttpServletRequest, HttpServletResponse) リクエストのHTTPメソッドがHeadメソッドであった場合に呼び出されるメソッドです。
protected void doOptions(HttpServletRequest, HttpServletResponse) リクエストのHTTPメソッドがOptionsメソッドであった場合に呼び出されるメソッドです。
protected void doPost(HttpServletRequest, HttpServletResponse) リクエストのHTTPメソッドがPostメソッドであった場合に呼び出されるメソッドです。
protected void doPut(HttpServletRequest , HttpServletResponse) リクエストのHTTPメソッドがPutメソッドであった場合に呼び出されるメソッドです。
protected void doTrace(HttpServletRequest, HttpServletResponse) リクエストのHTTPメソッドがTraceメソッドであった場合に呼び出されるメソッドです。
4.destroy( )メソッドの呼び出し
サーブレットコンテナのリソースが少なくなり、一定時間Servletプログラムにアクセスがない場合や、サーブレットコンテナを終了する場合などにサーブレットコンテナからdestroyメソッドが呼び出されます。destroyメソッドにはデータベースへの切断処理などServletプログラムの終了処理を記載します。一度destroyメソッドが呼び出されると、再度serviceメソッドが呼び出されることはありません。
 

Servletプログラムの例

以下に標準的なServletプログラムを例示し、Servletプログラムの基本構成を解説します。

HelloServlet.java

//Servletプログラムに必要なパッケージをインポートしています。
import javax.servlet.*;
import javax.servlet.http.*;
//HttpServletクラスを継承しています。
public class HelloServlet extends HttpServlet {  
  //doGetメソッドをオーバーライドしています。 
  public void doGet(HttpServletRequest req,
                      HttpServletResponse res) 
                      throws ServletException, IOException {

    PrintWriter out = res.getWriter();
    out.println("<HTML>");
    out.println("<BODY>");
    out.println("<H3>Hello World!</H3>");
    out.println("</BODY>");
    out.println("</HTML>");

  }
}

1はじめてのServlet