「ServletRequest」インターフェースは、「HttpServletRequest」インターフェースの親のようです。つまりは、
public interface HttpServletRequest extends ServletRequest
という感じです。よくServletクラスで、doGet()メソッドやdoPost()メソッドで、
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ }
や
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ }
と、引数に使われてる「HttpServletRequest」インターフェイスなどは、「ServletRequest」インターフェイスを継承してるということで、親インターフェイスのメソッドなどをオーバーライドしてるってことですかね?
・Java8のインタフェース実装から多重継承とMix-inを考える | ギークを目指して
getParameterNames() メソッドもそんなうちの1つっぽいです。
getParameterNames() メソッド
getParameterNames
java.util.Enumeration getParameterNames()
このリクエストに含まれているパラメータ名を表す String オブジェクトで構成される Enumeration を返します。 リクエストにパラメータが無い場合、空の Enumeration を返します。
- 戻り値:
- String オブジェクトで構成された Enumeration。String は各リクエストパラメータの名前。 パラメータが無い場合は空の Enumeration。
う~ん、よく分からんですね。
実際にgetParameterNames()メソッドを利用してみる
というわけで、実際に使ってみる。
Eclipseを起動し、「ファイル(F)」>「新規(N)」>「動的 Web プロジェクト」を選択。
「プロジェクト名(M):」を入力し、「次へ(N)>」をクリック。
「次へ(N)>」をクリック。
「完了(F)」をクリック。(ちなみに、「コンテキスト・ルート(R)」というのがプロジェクト名であり、サイト名にもなるようです、ただし、何かしらでURLに表示されるサイト名を変えてる場合もあります)
続いて、ServletファイルとJSPファイルをそれぞれ1つ作成します。まずは、Servletファイルから。「新規(N)」>「サーブレット」を選択。
「Java パッケージ(K):」「クラス名(M):」を適当に入力。「次へ(N)>」をクリック。
「次へ(N)>」をクリック。
「完了(F)」をクリック。
続いて、JSPファイル。「WebContent」を選択した状態で右クリックし、「新規(N)」>「JSP ファイル」を選択。
「ファイル名(M):」を入力し、「次へ(N)>」をクリック。
「新規 JSP ファイル(html)」を選択し、「完了(F)」。
Servletファイル、JSPファイルがそれぞれ1つできました。
そして、すみません、JavaBeanクラスも追加します。
「パッケージ」、「名前(M):」を入力し、「インターフェイス(I):」の「追加(A)...」を選択。
「Serializable - java.io」を選択肢、「OK」。
「完了(F)」をクリック。
JavaBeanクラスができました。
ファイルの編集
ItemBean.java
package bean; import java.io.Serializable; public class ItemBean implements Serializable { private String itemId; private String itemName; private String price; private int quantity; public ItemBean() {} public ItemBean(String itemId, String itemName, String price, int quantity) { this.itemId = itemId; this.itemName = itemName; this.price = price; this.quantity = quantity; } public String getItemId() { return itemId; } public void setItemId(String itemId) { this.itemId = itemId; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } }
ParamTestServlet.java
package servlet; import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import bean.ItemBean; /** * Servlet implementation class ParamTestServlet */ @WebServlet("/ParamTestServlet") public class ParamTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ParamTestServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); HttpSession session = request.getSession(); RequestDispatcher rd; String url = ""; Listitems = new ArrayList<>(); ItemBean item01 = new ItemBean("s0001", "そば", "280", 10); ItemBean item02 = new ItemBean("s0002", "うどん", "280", 10); ItemBean item03 = new ItemBean("s0003", "パスタ", "480", 10); ItemBean item04 = new ItemBean("s0004", "ラーメン", "380", 10); items.add(item01); items.add(item02); items.add(item03); items.add(item04); session.setAttribute("items", items); url = "./index.jsp"; rd = request.getRequestDispatcher(url); rd.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); HttpSession session = request.getSession(); RequestDispatcher rd; String url = ""; StringBuffer sb = new StringBuffer(); 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]); if("購入".equals(request.getParameter(name))) { sb.append(":"); sb.append(request.getParameter(name + "list")); sb.append("個"); } sb.append("
"); } } } session.setAttribute("param", new String(sb)); url = "./index.jsp"; rd = request.getRequestDispatcher(url); rd.forward(request, response); } }
index.jsp
<%@page import="bean.ItemBean"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% List<ItemBean> items = (List<ItemBean>)session.getAttribute("items"); String param = (String)session.getAttribute("param"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>getParameterNamesテスト</title> </head> <body> <form action="./ParamTestServlet" method="POST"> <input type="hidden" name="hoge" value="ほげぇ~"> <input type="hidden" name="fuge" value="ふげぇ~"> <input type="hidden" name="guhe" value="ぐへぇ~"> <input type="hidden" name="bohe" value="ぼへぇ~"> <input type="hidden" name="moge" value="もげぇ~"> <table> <tr> <th>商品番号</th><th>商品名</th><th>値段</th><th>購入数</th><th>購入</th> </tr> <% for(ItemBean item: items) { %> <tr> <td><%= item.getItemId() %></td> <td><%= item.getItemName() %></td> <td><%= item.getPrice() %></td> <td> <select name="<%= item.getItemId() %>list"> <% for(int num = 0; num < item.getQuantity(); num++) { %> <option value="<%= num %>"><%= num %></option> <% } %> </select> </td> <td> <% if(item.getQuantity() != 0) { %> <input type="submit" name="<%= item.getItemId() %>" value="購入"> <% } %> </td> </tr> <% } %> </table> </form> <hr> <% if(param != null) { %> <%= param %> <% } %> </body> </html>
サーバーで実行(今回はサーブレットファイルを選択した状態で右クリックし、「実行(R)」>「サーバーで実行」を選択。)
「次へ(N)>」をクリック。
「構成済み(C):」に実行したい「プロジェクト」が追加されているのを確認し、「完了(F)」をクリック。
ブラウザで確認。
個数を入力し、「購入」をクリック。
HTMLで、name属性のあるもののvalueの値がすべて取れています。
もしくは、URLとかについているgetパラメーター(『http://hoge.com?itemname=カラマーゾフの兄弟&itemauth=ドストエフスキー&price=680円』みたいな、「?」以降の文字列の、ここでは「itemname、itemauth、price」とかがパラメーター名)とかを取得できるってことですかね。
今回はこのへんで。