読者です 読者をやめる 読者になる 読者になる

サーブレットのフォーム処理(getPrameterValues)

Java

前回の「サーブレットのフォーム処理の基本」では一つのname属性に対して一つのinputタグが付いていました。そのためgetparameter()メソッドを使って、入力値を取得することができました。

しかし、これではname属性が同じで複数のinputタグを表記するHTMLフォームのcheckboxでは使えません。そこでcheckboxの場合にはgetParameter()メソッドの代わりにgetParameterValues()メソッドで入力値を所得します。

以下にそのサンプルプログラムを示します。簡単にポイントを記します。

  • getParameterValues()メソッドを使った値の取得
  • String型の配列への代入とNullPointExceptionエラーを起こさない為のIF文処理。

ちなみにプログラムを作っていて気がついたことを記しておきます。

response.setContentType()メソッドサーブレットの処理結果の示し方を表すために使われます。すなわち、引数にHTMLファイルの文字コードセットWindows-31Jを使うことを示す、response.setContentType("text/html; charset=Windows-31J")と書きます。

ところが、僕はrequest.setCharacterEncoding()メソッドと混ざってしまい、文字コーディングセットだけを記入し、text/htmlをよく忘れてしまいます。出力形式が不明なままで実行されると正しくプログラムが動かないので要注意です。
selfInfoHTML.html

<!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=windows-31j">
<title>フォーム情報の受け取り</title>
</head>
<body>
あなたのことを教えてください。<HR/>
	<FORM action="SelfInfoServlet" method="POST">
	名前<INPUT type="text" name="name"><BR/>
	性別<INPUT type="radio" name="sex" value="男"></INPUT>
		<INPUT type="radio" name="sex" value="女"></INPUT><BR/>
	件名<SELECT name="state">
		<OPTION value="京都">京都</OPTION>
		<OPTION value="大阪">大阪</OPTION>
		<OPTION value="兵庫">兵庫</OPTION>
	</SELECT><BR/>
	趣味<INPUT type="checkbox" name="hobby" value="ゴルフ">ゴルフ</INPUT>
		<INPUT type="checkbox" name="hobby" value="野球">野球</INPUT>
		<INPUT type="checkbox" name="hobby" value="テニス">テニス</INPUT> <BR/>

	<INPUT type="submit" value="submit" ></INPUT> <BR/>
	</FORM>
</body>
</html>

SelfInfoServlet.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SelfInfoServlet
 */
public class SelfInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public SelfInfoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		// TODO Auto-generated method
		response.setContentType("text/html; charset=Windows-31J");
		java.io.PrintWriter out = response.getWriter();


		request.setCharacterEncoding("Windows-31J");
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		String state = request.getParameter("state");
		String hobby[] = request.getParameterValues("hobby");

		out.println("<HTML>");
		out.println("<HEAD>");
		out.println("<TITLE>Servlet Test</TITLE>");
		out.println("</HEAD>");
		out.println("<BODY>");
		out.println("名前:"+name+"<BR/>");
		out.println("性別:"+sex+"<BR/>");
		out.println("県名:"+state+"<BR/>");
		out.println("趣味:");

		if(hobby != null){
			for(int i=0; i<hobby.length; i++){
				out.println(hobby[i] + " ");
			}
		}
		out.println("</BODY>");
		out.println("</HTML>");
		out.close();
	}

}