- 2.1. サーブレットのライフサイクル
- 2.2. サーブレット毎の初期設定値の読み出し
- 2.3. リクエストからのパラメータの読み出し
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で処理を区別するのが楽。