パラメータ名の取得(getParameterNames)
リクエストに含まれるパラメータ名を取得する必要はあまりありませんが、デバックなどの目的で送付されてきたパラメータを取得したい場合には「HttpServletRequest」インターフェースの親インターフェースの「ServletRequest」インターフェースで定義されている「getParameterNames」メソッドを使います。
getParameterNames public java.util.Enumeration getParameterNames()
Returns an Enumeration of String objects containing the names of the parameters contained in this request. If the request has no parameters, the method returns an empty Enumeration. Returns: an Enumeration of String objects, each String containing the name of a request parameter; or an empty Enumeration if the request has no parameters
例えば次のように使います。
public class Sample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ Enumeration names = request.getParameterNames(); while (names.hasMoreElements()){ String name = (String)names.nextElement(); } } }
サンプルプログラム
では簡単なサンプルで試して見ます。
フォームが含まれるHTMLページは、送信方法を「POST」にしたものを使います。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" Content="text/html;charset=Shift_JIS"> <title>フォームサンプル</title> </head> <body> <p>アンケート調査です</p> <form action="/sample/RequestSample4" method="post"> <table> <tr> <td>氏名</td> <td><input type="text" size="20" value="" name="name"></td> </tr> <tr> <td>年齢</td> <td><input type="text" size="5" value="" name="old"></td> </tr> <tr> <td>好きな果物</td> <td> <select name="food" size="3" multiple> <option value="りんご">りんご</option> <option value="メロン">メロン</option> <option value="ぶどう">ぶどう</option> </select> </td> </tr> </table> <input type="submit" name="button1" value="送信"> </form> </body> </html>
次にフォームから送られてくるリクエストパラメータを処理するサーブレットを作成します。パラメータ名を全て取得し、パラメータ名に対応する値を取り出して名前と値のペアで画面に表示します。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Enumeration; public class RequestSample4 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("Shift_JIS"); StringBuffer sb = new StringBuffer(); sb.append("<html>"); sb.append("<head>"); sb.append("<title>デバッグ</title>"); sb.append("</head>"); sb.append("<body>"); sb.append("<p>"); Enumeration names = request.getParameterNames(); while (names.hasMoreElements()){ String name = (String)names.nextElement(); String vals[] = request.getParameterValues(name); if (vals != null){ for (int i = 0 ; i < vals.length ; i++){ sb.append(name); sb.append(":"); sb.append(vals[i]); sb.append("<br>"); } } } sb.append("</p>"); sb.append("</body>"); sb.append("</html>"); out.println(new String(sb)); out.close(); } }
サンプルプログラムをコンパイルして作成した「RequestSample4.class」ファイルを別途作成した「web.xml」ファイルを次のように配置します。
D:\ -- servlet-sample | +-- (formsample4.html) | +-- WEB-INF | +-- (web.xml) | +-- classes | +-- (RequestSample4.class)
web.xmlファイルは次のようになります。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>RequestSample4</servlet-name> <servlet-class>RequestSample4</servlet-class> </servlet> <servlet-mapping> <servlet-name>RequestSample4</servlet-name> <url-pattern>/RequestSample4</url-pattern> </servlet-mapping> </web-app>
コンテキストファイルを作成し「(Tomcatをインストールしたディレクトリ)\Tomcat 5.5\conf\Catalina\localhost\」ディレクトリに「sample.xml」ファイルとして保存します。内容は以下の通りです。
<Context path="/sample" docBase="d:/servlet-sample/sample"> </Context>
準備は以上です。ではTomcatを再起動してから「http://localhost:8080/sample/formsample4.html」へブラウザでアクセスして下さい。
フォームが表示されますので、適当に値を入力してから送信ボタンをクリックして下さい。すると次のようにリクエストパラメータの名前と値を表示します。
リクエストパラメータの確認を行いたい場合には利用できると思います。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。