【サーブレット&jsp】フォームでsubmitした値をサーブレットで受け取る

Java

今回の記事ではjspのフォームからsubmitした値をサーブレットで受け取って処理する方法について解説していきます。

「独学だと何から勉強したら良いかわからない」という方にはDig Skillがおすすめです!
Dig Skillでは月1000円でオリジナルのカリキュラムを使ってサーブレットやjspを学ぶことができます!30日間の無料体験もあるので、公式サイトをチェックしてみてください!

フォームをsubmitするjsp

まずはjspを作成していきます。
submitするフォームを持っているsubmit.jspを作成しました。

submit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>フォームからsubmitする</title>
</head>
<body>
	<form action="submit-servlet" method="POST">
		名前:<input type="text" name="name"><br>
		年齢:<input type="number" name="age"><br>
		趣味:<input type="text" name="hobby"><br>
		<input type="submit" value="送信">
	</form>
</body>
</html>

こちらのsubmit.jspを画面表示すると次のようになります。

細かく解説していきます。
まずはフォームの宣言からです。

<form action="submit-servlet" method="POST">

このフォームは送信されると、「submit-servlet」というurlにリクエストを送ります。
また今回はメソッドとして、POSTを指定しました。

次にフォームが送信されると実際に送られるデータとなる部分です。

名前:<input type="text" name="name"><br>
年齢:<input type="number" name="age"><br>
趣味:<input type="text" name="hobby"><br>

フォームとして送信する内容はそれぞれのinputタグで決定しています。
またそれぞれのinputタグには属性があり、属性値でタグを識別しています。

フォームの送受信で大切になるのはinputタグの「name」属性です。
このname属性に設定した値をサーブレット側で指定することで、値を取り出すことが出来ます。

最後に送信ボタンです。

<input type="submit" value="送信">

inputタグのtype属性を「submit」にすると、ボタンが表示され押した時にフォームが送信されるようになります。
value属性に設定した値が、画面表示した際のボタンに表示されます。

値を受け取るサーブレット

次にフォームからsubmitされた値を受け取るSubmitServletを作成します。

SubmitServlet.java

package uhablog;

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;

@WebServlet("/submit-servlet")
public class SubmitServlet extends HttpServlet {

	/**
	 * フォームからsubmitされた値を受け取る
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); // 文字化け防止
		
		// フォームの値を受け取る
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		String hobby = request.getParameter("hobby");
		
		// コンソールに出力
		System.out.println(name);
		System.out.println(age);
		System.out.println(hobby);
		
		// リクエストスコープに値を設定する
		request.setAttribute("name", name);
		request.setAttribute("age", age);
		request.setAttribute("hobby", hobby);
		
		// 画面遷移
		request.getRequestDispatcher("/submit-result.jsp").forward(request, response);
	}
}

このサーブレットではdoPostメソッドを宣言し、Postリクエストが送られてきた時に実行されます。
doPostメソッドではフォームから送られてきた値を受け取り、その値をそのままリクエストスコープに設定しています。

@WebServlet("/submit-servlet")
public class SubmitServlet extends HttpServlet {

先ほど作成したフォームではaction属性に「submit-servlet」を指定しました。
そのため今回作成するサーブレットを呼び出すためのURLも同じように「submit-servlet」を指定します。

次にdoPostメソッドについてです。
先ほどのフォームではメソッドとして、POSTを指定しました。
そのため、フォームが送信された際にサーブレットのdoPostメソッドが実行されます。

// フォームの値を受け取る
String name = request.getParameter("name");
String age = request.getParameter("age");
String hobby = request.getParameter("hobby");

doPostメソッドでフォームの値を受け取ります。
requestオブジェクトのgetParameterメソッドを呼び出して、フォームの値を取り出します。

この時引数として指定する値はフォームのinputタグのname属性に設定した値です。
例えば、ageを引数として渡すと、inputタグのname属性がageの値を取得することが出来ます。

// コンソールに出力
System.out.println(name);
System.out.println(age);
System.out.println(hobby);

次にコンソールに出力して、正しく値を受け取れているか確認している箇所です。

// リクエストスコープに値を設定する
request.setAttribute("name", name);
request.setAttribute("age", age);
request.setAttribute("hobby", hobby);

次に表示するjspで値を取得できるように設定しています。
第一引数に値を取り出す際に指定する値を渡し、第二引数に設定する値を指定しています。

// 画面遷移
request.getRequestDispatcher("/submit-result.jsp").forward(request, response);

次の記述で画面遷移をしています。
今回はsubmit-result.jspを表示するようにしています。

結果を表示するsubmit-result.jsp

最後に結果を表示するsubmit-result.jspを作成します。
こちらのjspではフォームから送信された値を表示します。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>取得結果</title>
</head>
<body>
	<%
		// リクエストスコープから値を取り出す
		String name = (String)request.getAttribute("name");
		String age = (String)request.getAttribute("age");
		String hobby = (String)request.getAttribute("hobby");
	%>
	
	<!-- 取得した値を表示する -->
	<p>名前:<%=name %></p>
	<p>年齢:<%=age %></p>
	<p>趣味:<%=hobby %></p>
</body>
</html>

サーバーを起動し、submit.jspで値を入力して、送信します。

submit.jsp

submit-result.jsp

コンソールにも、サーブレットで受け取った値が出力されています。

以上、フォームでsubmitした値をサーブレットで受け取る方法でした。

「独学だと何から勉強したら良いかわからない」という方にはDig Skillがおすすめです!
Dig Skillでは月1000円でオリジナルのカリキュラムを使ってWebアプリの開発方法を学ぶことができます!30日間の無料体験もあるので、公式サイトをチェックしてみてください!

コメント

タイトルとURLをコピーしました