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

2クライアントからのデータ取得

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

クライアントからのデータ取得

このページでは、クライアントから送信されたデータを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】値を入力する画面です。


<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. (1)method属性で"post"を、action属性でServletプログラム"RequestServ"を指定しています。

【RequestServ.java】【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. (1)setContentTypeメソッドで生成されるコンテンツの種類を指定します。ここでは、HTMLファイルを返すため、"text/html; charset=Windows-31J"を指定します。
  2. (2)setCharacterEncodingメソッドでパラメータデータのエンコード方式を指定します。このメソッドは、パラメータを取得する前に指定する必要があります。
  3. (3)テキストを出力するためにgetWriterメソッドで、PrintWriterオブジェクトを生成します。
  4. (4)getParameterメソッドで前ページからのパラメータを取得します。引数に取得したいパラメータ名を指定します。
  5. (5)getParameterValuesメソッドで前ページからのパラメータを取得します。getParameterValuesメソッドはパラメータ値が複数ある場合に使用します。パラメータ値を配列で取得し、表示します。

【実行結果】Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。

Javaの道_HttpServletRequest_1
Javaの道_HttpServletRequest_2

ヘッダーの取得

ここでは、HTTPプロトコルのヘッダーを取得する方法について解説します。HttpServletRequestインタフェースにはヘッダーを取得するメソッドが用意されています。

HttpServletRequestで定義されているヘッダー取得関連のメソッド

戻り型 メソッド 説明
String getHeader
(String)
引数にヘッダー名を指定し、そのヘッダーの値を文字列で返します。ヘッダーが存在しない場合はNullが返されます。
Enum eration getHeaderNames( ) ヘッダー名に対し、ヘッダーの値が複数返されるものに使用します。返される値はEnumeration型です。ヘッダーが存在しない場合はNullが返されます。
Enum eration 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. (1)直接ServletプログラムにアクセスするためHTTPのGetメソッドに対応したdoGetメソッドをオーバーライドします。
  2. (2)getHeaderNamesメソッドを使用し、ヘッダー名を取得します。
  3. (3)Enumerationインタフェースに定義されているhasMoreElementsメソッドと、nextElementメソッドを使用し、すべてのヘッダー名を表示します。

【実行結果】Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。

Javaの道_HttpServletRequest_3

2クライアントからのデータ取得