目次へ

2.3. リクエストからのパラメータの読み出し

この節では、HTML Formやリンクなどで指定されたパラメータの読み出し方法について説明します。サーブレットではパラメータの読み出しに、「javax.servlet.ServletRequest」を使用します。インスタンスはserviceメソッドの引数に指定されており、この引数を使用することによってパラメータを読み出すことができます。HttpServletクラスの場合は、全ての「doXXX」メソッドの引数に「javax.servlet.http.HttpServletRequest」があるので、このインスタンスを使用してパラメータを読み出します。

具体的にパラメータを読み出すには「getParameter」メソッドを使用します。以下に例を示します。

public class SampleServlet extends HttpServlet{
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,IOException{
    String name=request.getParameter("name");
    ....
  }
}

getParameterメソッドの引数に、パラメータ名を指定します。メソッドはパラメータが無い場合はnullを返します。

実はこのままではパラメータの値が日本語であった場合、正しくデータを読み取ることができません。サーブレットはデフォルトではパラメータをASCII文字としか解釈しないためです。日本語データを読み取るためには、getParameterメソッドで値を読み取る前に、「setCharacterEncoding」メソッドで文字コードを指定する必要があります。

public class SampleServlet extends HttpServlet{
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,IOException{
    request.setCharacterEncoding("EUC-JP");
    String name=request.getParameter("name");
    ....
  }
}

パラメータが複数の値を持っていた場合にはどうするでしょうか。HTMLのFormでは複数のコントロールに同一の名前を指定することが可能ですので、パラメータは複数の値を持ちえます。そういった場合にはgetParameterではなく、「getParameterValues」メソッドを使用します。

public class SampleServlet extends HttpServlet{
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,IOException{
    request.setCharacterEncoding("EUC-JP");
    String[] list=request.getParameterValues("list");
    ....
  }
}

メソッドはStringの配列で値を返します。1つも値が無かった場合には、要素0の配列ではなくnullを返します。

これらの方法は、ファイルをアップロードする際に使用するMIMEタイプ「multipart/form-data」の際には正しく動作しません。この場合には別の方法を使用しなければならないので、注意してください。

(実習課題2)

実習課題1のプログラムを改良しなさい。

  • 実行できるSQL文を複数用意し、予め設定ファイルに記述しておくこと。
  • まずクライアントに対して、どのSQL文を実行するか選択するページを表示すること。
  • 次に選択したSQL文の実行結果を表示すること。
  • 全て1つのサーブレットで処理すること。
  • (ヒント)GETとPOSTで処理を区別するのが楽。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp