5月26日

前回は、ServletとJSPを使用した簡単なWebアプリを作成した。

今回は、入力フォームを使用して、サーバー側にユーザーが入力したデータを渡せるようにする。
サーバー側では受け取ったデータをもとにしてデータを加工して応答する。

WebContentの下に form.jsp を作成する。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>入力フォーム</title>
</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>

入力フォームで入力されたデータを受け取るためのRequestServlet.javaを用意する。

package jp.abc;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestServlet
 */
@WebServlet("/RequestServlet")
public class RequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//(1)エンコード方式の指定
        res.setContentType("text/html; charset=UTF-8");
        //(2)パラメータのエンコード方式の指定
        req.setCharacterEncoding("UTF-8");

        //(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>");
	}
}

入力フォームにラジオボタンを追加する。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>入力フォーム</title>
</head>
<body>

<form method="post" action="RequestServlet">  //(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="radio" name="性別" value="男" /> 男 
	<input type="radio" name="性別" value="女" /> 女

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

</body>
</html>

追加されたラジオボタンのデータをサーブレットで受け取る。

package jp.abc;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestServlet
 */
@WebServlet("/RequestServlet")
public class RequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//(1)エンコード方式の指定
        res.setContentType("text/html; charset=UTF-8");
        //(2)パラメータのエンコード方式の指定
        req.setCharacterEncoding("UTF-8");

        //(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>");
        }
        String sex = req.getParameter("性別");
        out.println(sex + "<br>");

        out.println("</BODY>");
        out.println("</HTML>");
	}

}

select要素によるメニューを追加する。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>入力フォーム</title>
</head>
<body>

<form method="post" action="RequestServlet">  //(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="radio" name="性別" value="男" /> 男 
	<input type="radio" name="性別" value="女" /> 女
	<br>
	好きな果物:
	<select name="好きな果物">
		<option>りんご</option>
		<option>みかん</option>
		<option>バナナ</option>
		<option>パイナップル</option>
	</select>
	<br>

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

</body>
</html>

追加されたSELECT要素のデータをサーブレットで受け取る。

package jp.abc;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class RequestServlet
 */
@WebServlet("/RequestServlet")
public class RequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//(1)エンコード方式の指定
        res.setContentType("text/html; charset=UTF-8");
        //(2)パラメータのエンコード方式の指定
        req.setCharacterEncoding("UTF-8");

        //(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>");
        }
        String sex = req.getParameter("性別");
        out.println(sex + "<br>");

        String fruit = req.getParameter("好きな果物");
        out.println(fruit + "<br>");

        out.println("</BODY>");
        out.println("</HTML>");
	}

}

診断メーカーみたいなのを作ってみる。
まずは診断する名前を入力するJSPを作成する。

shindan.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>診断</title>
</head>
<body>

<form method="post" action="ShindanServlet">
診断したい名前を入れてください。<br>
<input type="text" name="name"><br>
<input type="submit" value="診断">
</form>

</body>
</html>

http://localhost:8080/tomcat/shindan.jsp にアクセスすると入力フォームが表示される。

診断を行うサーブレットを作成する。
ShindanServlet.java

package jp.abc;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ShindanServlet
 */
@WebServlet("/ShindanServlet")
public class ShindanServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}
}

tomcat を再起動してshindan.jspの診断ボタンを押すと、ShindanServletに遷移する。
処理を記述してないので、画面は真っ白になる。

診断結果を表示するJSPを作成する。
kekka.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>診断結果</title>
</head>
<body>
ここに診断結果を表示する予定
</body>
</html>

ShindanServletからkekka.jspにフォワードする。

package jp.abc;

import java.io.IOException;

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;

/**
 * Servlet implementation class ShindanServlet
 */
@WebServlet("/ShindanServlet")
public class ShindanServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd = request.getRequestDispatcher("kekka.jsp");
		rd.forward(request, response);
	}

}

shindan.jsp で診断ボタンを押すと、kekka.jspの内容が表示される。

診断の内容を変更して、入力フィールドを追加する。
「○○さんの○○度は○○%です」
のような診断結果を出すようにする。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>診断</title>
</head>
<body>

<form method="post" action="ShindanServlet">
<input type="text" name="name">さんの<br>
<input type="text" name="type">度を診断します<br>
<input type="submit" value="診断">
</form>



</body>
</html>

ShindanServletの中で0~100までのパーセント値を求められるようにする。

package jp.abc;

import java.io.IOException;

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;

/**
 * Servlet implementation class ShindanServlet
 */
@WebServlet("/ShindanServlet")
public class ShindanServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

		String name = request.getParameter("name");
		request.setAttribute("name", name);
		String t = request.getParameter("type");
		request.setAttribute("type", t);
		String s = name + t;
		int h = Math.abs(s.hashCode());
		h = h % 101;
		request.setAttribute("percent", h);
		RequestDispatcher rd = request.getRequestDispatcher("kekka.jsp");
		rd.forward(request, response);
	}

}

kekka.jspを修正する。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>診断結果</title>
</head>
<body>
${name} さんの ${type} 度は、${percent}%です。<br>
</body>
</html>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です