サーブレットの基本形

広告

ここではサーブレットの基本となるものを順に作っていきたいと思います。

HttpServletクラスの継承

HTTP通信を行うサーブレットは「HttpServlet」クラスを継承して作成します。

public class HelloWorld extends HttpServlet{
  /* ...  */
}

HTTPメソッドに対応したメソッドの実装

「HttpServlet」クラスを継承した場合は、「doGet」メソッド又は「doPost」メソッドを実装します。例えばGETメソッドで呼ばれる可能性があるサーブレットであれば次のようになります。

public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    /* ...  */

  }
}

POSTメソッドで呼ばれる可能性があるサーブレットであれば次のようになります。

public class HelloWorld extends HttpServlet{
  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    /* ...  */

  }
}

GETメソッドとPOSTメソッドの両方で呼ばれる可能性があるサーブレットであれば次のようになります。

public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    /* ...  */

  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    /* ...  */

  }
}

作成したサーブレットをブラウザなどから呼び出した時にGETメソッドで呼び出せば「doGet」メソッドの中に記述した処理が実行され、フォームなどから「POST」メソッドを使ってデータを送信した場合は「doPost」メソッドの中に記述した処理が実行されます。

doGetメソッドやdoPostメソッド内の処理

「doGet」メソッドはクライアントからデータの要求がある場合に呼び出されます。そこで「doGet」メソッド内にはクライアントに対して要求された内容を出力するような処理を記述します。出力する場合にはメソッドの引数の1つである「HttpServletResponse」インターフェースのオブジェクトを利用します。

「doPost」メソッドはクライアントからデータが送られてくる場合に呼び出されます。そこで「doPost」メソッド内にはクライアントから送られてきた情報などを取得するような処理を記述します。リクエストの内容を取得するにはメソッドの引数の1つである「HttpServletRequest」インターフェースのオブジェクトを利用します。

「doGet」メソッドでもフォームからデータを送信されてくることがありますし「doPost」メソッドでも結果をブラウザに返す必要がありますので結果的にはこの2つのメソッドで大きな使い方の違いはありません。あくまでリクエストのHTTPメソッドの種類に応じて分けられていると考えてもいいかと思います。

結果的にサーブレットは次のような形状となります。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>Hello World!</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Hello World!</h1>");
    out.println("</body>");
    out.println("</html>");

    out.close();
  }
}

( Written by Tatsuo Ikura )