// プロジェクトフォルダ > Javaリソース > src > servlet > FormSampleServlet.java
package servlet;
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;
// ここのURLパターンが、送信元フォームのactionと一致しないとエラー
@WebServlet("/FormSampleServlet")
public class FormSampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 送信元のmethodがpostなので、doPost()メソッド
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// URLエンコードされたリクエストパラメータをデコード
request.setCharacterEncoding("UTF-8");
// getParameter()メソッドでリクエストパラメータを取得
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String body = request.getParameter("body");
// リクエストパラメータをチェック
String errorMsg = "";
if(name == null || name.length() == 0) {
errorMsg += "<font color=\"red\">名前を入力してください</font><br>";
}
if(gender == null || gender.length() == 0) {
errorMsg += "<font color=\"red\">性別を入力してください</font><br>";
} else {
switch (gender) {
case ("0"):
gender = "Male";
break;
case ("1"):
gender = "Female";
break;
}
}
if(body == null || body.length() == 0) {
errorMsg += "<font color=\"red\">内容を入力してください</font><br>";
}
// 送信完了メッセージ
String msg = name + "さん(" + gender +")、お問い合わせありがとうございました。<br>"
+ "内容:" + body;
if(errorMsg.length() != 0) {
msg = errorMsg;
}
// HTML出力
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset=\"UTF-8\">");
out.println("<title>フォーム送信内容</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>" + msg +"</p>");
out.println("</body>");
out.println("</html>");
}
}
<!-- プロジェクトフォルダ > WebContent > formSample.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>
<form action="/Lesson5/FormSampleServlet" method="post">
名前: <input type="text" name="name"> <br> 性別: <label>Male<input
type="radio" name="gender" value="0"></label> / <label>Female<input
type="radio" name="gender" value="1"></label> <br> 内容:
<textarea name="body"></textarea>
<input type="submit" value="送信">
</form>
</body>
</html>
◆サーブレットでリクエストパラメータを取得する
(0)送信されたリクエストパラメータは、HttpServletRequestインスタンスに格納されている。
そのインスタンスから、リクエストパラメータを取得する。
(1)URLエンコードされたリクエストパラメータをデコードして元に戻す
request.setCharacterEncoding("送信元HTMLの文字コード");
例:
request.setCharacterEncoding("UTF-8");
(2)リクエストパラメータを取得する
String xxx = request.getParameter("リクエストパラメータの名前");
例:
リクエストパラメータ「name=ディック」を取得したいなら、リクエストパラメータの名前である「name」を引数に渡す
String name = request.getParameter("name");
◆JSPでリクエストパラメータを取得する場合
doGet()、doPost()は宣言されない。けど、使える。
暗黙オブジェクト:宣言せずに利用できる特別なオブジェクト。
例:
<%
requset.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String age = request.getParameter("age");
%>
◆フォーム
<form action"送信先" method="リクエストメソッド">
...
</form>
◇action属性
・サーブレット場合:/プロジェクト名/URLパターン
・JSPの場合:/プロジェクト名/WebContent以降のパス
◇method属性(省略するとGET)
GET:WebサーバからWebページの情報を取得したいとき。アドレスバーの表示は「リクエスト先URL?リクエストパラメータ」
POST:情報をサーバに送りたいとき。コンタクトフォームなど。アドレスバーの表示は「リクエスト先URL」(入力データが見えないようになる)
◆フォームに入力されたデータは「部品名=値」の形式で送信される。
この「部品名=値」のことを「リクエストパラメータ」という
◇例:
<form action="送信先" method="リクエストメソッド">
NAME: <input type="text" name="name"><br>
AGE: <input type="text" name="age"><br>
E-MAIL: <input type="text" name="email">
</form>
↓
・複数のリクエストパラメータ同士が「&」でつながれて送信される
name=ディック&age=89&email=dick@xxx.xxx
・実際は、URLエンコード(文字変換処理)がおこなわれて送信される。
・変換されたリクエストパラメータを受け取るサーバサイドプログラムは、デコードする必要がある。
◆リクエストパラメータをこっそり仕込む場合
◇hiddenを使う
例:
<input type="hidden" name="送信したいリクエストパラメータ名" value="送信したい値">
◇送信先に「?名前=値」
例:
<form action="送信先?名前=値" method="get">...</form>
<a href="送信先?名前=値">...</a>