Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Servlet・JSP > Servlet −2.クライアントからのデータ取得
更新日:2006/10/15
Servlet−2.クライアントからのデータ取得
このページでは、クライアントから送信されたデータをServletプログラムで取得する方法について解説します。データの取得にはHttpServletRequestインタフェースを使用します。
パラメータデータの取得
ここでは、HTMLの<form>タグやリンクなどから送信されるパラメータデータを取得する方法について解説します。HttpServletRequestインタフェースにはこれらのデータを取得するためのメソッドが用意されています。Servletプログラムが通常オーバーライドするdoXxxメソッドの引数にはHttpServletRequestインタフェースのオブジェクトが定義されています。このオブジェクトを通じでクライアントから送信されるデータを取得します。
【HttpServletRequestで定義されているパラメータデータ取得関連のメソッド】
戻り型
メソッド
説明
public String
getParameter(String)
引数にパラメータ名を指定し、そのパラメータの値を取得します。パラメータが存在しない場合はNullが返されます。
public String[ ]
getParameterValues(String)
パラメータ名に対して、パラメータ値が複数ある場合にこのメソッドを使用します。パラメータ値はString型の配列で返されます。パラメータが存在しない場合はNullが返されます。
public Enumeration getParameterNames( ) クライアントから送信されるすべてのパラメータのパラメータ名を取得します。
public void setCharacterEncoding(String) エンコード方式を引数に指定したエンコード方式に置き換えます。パラメータ値を取得する前に指定する必要があります。
前ページで入力した値を取得し、表示するプログラムを例示します。
【form.html】値を入力する画面です。
<html>
<head>
  <meta http-equiv="Content-Type" 
        content="text/html; charset=Windows-31J">
</head>
<body>

<form method="post" action="RequestServ">  //(1)method、actionの指定
  <input type="text" name="name1"><br><br>

  <input type="checkbox" name="vehicle" value="車">車<br>
  <input type="checkbox" name="vehicle" value="バイク">バイク<br>
  <input type="checkbox" name="vehicle" value="飛行機">飛行機<br><br>

  <input type="submit" value="submit">
</form>

</body>
</html>
(1). method属性で"post"を、action属性でServletプログラム"RequestServ"を指定しています。
【RequestServ.java】form.htmlで入力した値を取得し、表示するServletプログラムです。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RequestServ extends HttpServlet {
 public void doPost(HttpServletRequest req, HttpServletResponse res)
             throws ServletException, IOException {
  //(1)エンコード方式の指定
  res.setContentType("text/html; charset=Windows-31J");
  //(2)パラメータのエンコード方式の指定
  req.setCharacterEncoding("Windows-31J");

  //(3)PrintWriterオブジェクトの生成
  PrintWriter out = res.getWriter();
  out.println("<HTML>");
  out.println("<BODY>");
  //(4)name1パラメータの取得
  out.println(req.getParameter("name1") + "<br>");
  //(5)vehicleパラメータの取得
  String vehicle[ ] = req.getParameterValues("vehicle");
  for (int i = 0; i < vehicle.length; i++ ) {
   out.println(vehicle[i] + "<br>");
  }

  out.println("</BODY>");
  out.println("</HTML>");
 }
}
(1). setContentTypeメソッドで生成されるコンテンツの種類を指定します。ここでは、HTMLファイルを返すため、"text/html; charset=Windows-31J"を指定します。
(2). setCharacterEncodingメソッドでパラメータデータのエンコード方式を指定します。このメソッドは、パラメータを取得する前に指定する必要があります。
(3). テキストを出力するためにgetWriterメソッドで、PrintWriterオブジェクトを生成します。
(4). getParameterメソッドで前ページからのパラメータを取得します。引数に取得したいパラメータ名を指定します。
(5). getParameterValuesメソッドで前ページからのパラメータを取得します。getParameterValuesメソッドはパラメータ値が複数ある場合に使用します。パラメータ値を配列で取得し、表示します。
【実行結果】Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。
Javaの道_HttpServletRequest_1
Javaの道_HttpServletRequest_2
ヘッダーの取得
ここでは、HTTPプロトコルのヘッダーを取得する方法について解説します。HttpServletRequestインタフェースにはヘッダーを取得するメソッドが用意されています。
【HttpServletRequestで定義されているヘッダー取得関連のメソッド】
戻り型
メソッド
説明
String
getHeader(String)
引数にヘッダー名を指定し、そのヘッダーの値を文字列で返します。ヘッダーが存在しない場合はNullが返されます。
Enumeration
getHeaderNames( )
ヘッダー名に対し、ヘッダーの値が複数返されるものに使用します。返される値はEnumeration型です。ヘッダーが存在しない場合はNullが返されます。
Enumeration getHeaders(String) 送信されるすべてのヘッダー名を返します。返される値はEnumeration型です。
int getIntHeader(String) 引数にヘッダー名を指定し、そのヘッダーの値をint型で返します。ヘッダーが存在しない場合は-1が返されます。
送信されるヘッダーを取得し、すべてのヘッダー名を表示するプログラムを例示します。
【RequestHead.java】取得したすべてのヘッダー名を表示するServletプログラムです。
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RequestHead extends HttpServlet {
  //(1)doGetメソッドをオーバーライド
  public void doGet(HttpServletRequest req, HttpServletResponse res)
              throws ServletException, IOException {
    PrintWriter out = res.getWriter();
    out.println("<HTML>");
    out.println("<BODY>");

    //(2)ヘッダー名の取得
    Enumeration headers = req.getHeaderNames();
    //(3)ヘッダー名の表示
    while (headers.hasMoreElements()) {
      out.println(headers.nextElement() + "<br>");
    }

    out.println("</BODY>");
    out.println("</HTML>");
  }
}
(1). 直接ServletプログラムにアクセスするためHTTPのGetメソッドに対応したdoGetメソッドをオーバーライドします。
(2). getHeaderNamesメソッドを使用し、ヘッダー名を取得します。
(3). Enumerationインタフェースに定義されているhasMoreElementsメソッドと、nextElementメソッドを使用し、すべてのヘッダー名を表示します。
【実行結果】Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。
Javaの道_HttpServletRequest_3



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道