使用入门:处理表单数据

了解如何创建 HTML 表单,该表单使用 HTTP POST 方法将用户提供的数据提交到 App Engine 上运行的 Java Servlet。

准备工作

配置开发环境并创建 App Engine 项目

创建表单

使用 JavaServer Pages (JSP) 创建 HTML 表单。

以下 JSP 代码可以生成用于创建博文的表单。该表单有三个文本输入字段,titleauthorcontent,还有可用于将数据提交给 Servlet 的 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 网址的处理程序。您应该使用 JSP 的 escapeXml 功能为跨站点脚本 (XSS) 攻击计数,如代码段所示。创建表单处理程序的说明见下文。

处理表单数据

用户提交表单数据后,这些数据将交由表单处理程序处理。在如下代码段中,表单处理程序是一个名为 createBlogPost 的 Servlet:

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") 注释,该注释可将 Servlet 映射到处理请求的 URI:/create。对于熟悉 App Engine Java 7 运行时的开发人员,该注释将替代先前在 web.xml 文件中确定的映射关系。

部署到 App Engine

您可以使用 Maven 将应用部署到 App Engine。

转到项目的根目录并输入以下命令:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

PROJECT_ID 替换为您的 Cloud 项目 ID。如果您的 pom.xml 文件已经指定了您的项目 ID,则您无需在运行的命令中添加 -Dapp.deploy.projectId 属性。

Maven 完成应用部署后,输入以下命令可在新应用中自动打开网络浏览器标签:

gcloud app browse

后续步骤

作为处理用户数据的扩展,您可能希望使用 Cloud SQL、Cloud Datastore 或 Cloud Storage 来存储数据: