HTTP の POST
メソッドを使用する HTML フォームを作成して、App Engine 上で実行されている Java サーブレットにユーザーが用意したデータを送信できるようにする方法を学びます。
始める前に
開発環境を構成し、App Engine プロジェクトを作成します。
フォームの作成
JavaServer Pages(JSP)を使用して HTML フォームを作成します。
次の JSP コードは、ブログ投稿を作成するフォームを生成します。3 つのテキスト入力フィールドとして title
、author
、content
があり、サーブレットにデータを送信する Save
ボタンがあります。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<div class="container">
<h2>
Create a new blog post
</h2>
<form method="POST" action="/create">
<div>
<label for="title">Title</label>
<input type="text" name="title" id="title" size="40" value="${fn:escapeXml(blog.title)}" class="form-control" />
</div>
<div>
<label for="author">Author</label>
<input type="text" name="author" id="author" size="40" value="${fn:escapeXml(blog.author)}" class="form-control" />
</div>
<div>
<label for="description">Post content</label>
<textarea name="description" id="description" rows="10" cols="50" class="form-control">${fn:escapeXml(blog.content)}</textarea>
</div>
<button type="submit">Save</button>
</form>
</div>
このフォームでは、/create
を URL とするハンドラにフォームデータが送信されます。コード スニペットに示すように、JSP の escapeXml
機能を使用してクロスサイト スクリプティング(XSS)攻撃に対処する必要があります。このフォーム ハンドラの作成手順を以下に示します。
フォームデータの処理
ユーザーが送信したフォームデータはフォーム ハンドラで処理されます。以下のスニペットでは、サーブレットである createBlogPost
がフォーム ハンドラとして機能します。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
@WebServlet(name = "createBlogPost", value="/create")
public class createBlogPost extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println(
"Article with the title: " + req.getParameter("title") + " by "
+ req.getParameter("author") + " and the content: "
+ req.getParameter("description") + " added.");
}
}
アノテーション @WebServlet(name = "createBlogPost", value="/create")
に注意してください。このアノテーションは、リクエスト(/create
)を処理する URI にサーブレットをマッピングします。App Engine Java 7 ランタイムに慣れ親しんだデベロッパーのために、このアノテーションは以前に web.xml
ファイルで作成したマッピングを置き換えます。
App Engine へのデプロイ
Maven を使用して App Engine にアプリをデプロイします。
プロジェクトのルート ディレクトリに移動し、次のように入力します。
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。pom.xml
ファイルですでにプロジェクト ID を指定している場合は、実行するコマンドに -Dapp.deploy.projectId
プロパティを含める必要はありません。
Maven によってアプリがデプロイされた後、次のように入力すると、新しいアプリでウェブブラウザのタブが自動的に開きます。
gcloud app browse
次のステップ
ユーザーデータの拡張処理として、Cloud SQL、Cloud Datastore、または Cloud Storage を使用してデータを格納できます。