こんにちは、大学時代にプログラミングを始め、現在はエンジニアをしているuhablog(ウハブログ)です。
今回の記事ではjspのフォームからsubmitした値をサーブレットで受け取って処理する方法について解説していきます。
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
フォームを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した値をサーブレットで受け取る方法でした。
挫折せずにプログラミングを学ぶためには?
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
【関連記事】Freeks評判、口コミ