入門: フォームデータの処理

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

このサーブレットによってリクエストが処理される場所である URI /create にサーブレットをマップする注釈として @WebServlet(name = "createBlogPost", value="/create") があります。App Engine の Java 7 ランタイムに精通した開発者向けに、これまで web.xml ファイルで実現していたマッピングがこの注釈で置き換えられています。

App Engine へのデプロイ

Maven を使用して App Engine にアプリをデプロイします。

プロジェクトのルート ディレクトリに移動し、次のように入力します。

mvn appengine:deploy

Maven によってアプリがデプロイされた後、次のように入力すると、新しいアプリでウェブブラウザのタブが自動的に開きます。

gcloud app browse

次のステップ

ユーザーデータの拡張処理として、Cloud SQL、Cloud Datastore、または Cloud Storage を使用してデータを格納できます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境