Learn how to create a HTML form that uses the HTTP POST
method to submit
user-provided data to a Java Servlet running on App Engine.
Before you begin
Configure your development environment and create your App Engine project.
Creating a form
Create a HTML form using JavaServer Pages (JSP).
The following JSP code generates a form to create a blog post. It takes
three text input fields, title
, author
and content
and has a Save
button
that submits the data to the servlet:
<%@ 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>
This form sends the form data to the handler at the /create
URL. You should
use JSP's escapeXml
functionality to counter cross-site scripting (XSS)
attacks, as shown in the code snippet. Instructions
for creating the form handler are shown next.
Handling form data
Once the user submits the form data, it is handled by a form handler. In the
snippet below, the form handler is a servlet named 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.");
}
}
Note the annotation @WebServlet(name = "createBlogPost", value="/create")
,
which maps the servlet to the URI where it handles requests: /create
. For
developers familiar with the App Engine Java 7 runtime, this annotation replaces
the mappings that were previously made in the web.xml
file.
Deploying to App Engine
You can deploy your app to App Engine using Maven.
Go to the root directory of your project and type:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Replace PROJECT_ID with the ID of your Google Cloud project. If
your pom.xml
file already
specifies your
project ID, you don't need to include the -Dapp.deploy.projectId
property in the
command you run.
After Maven deploys your app, open a web browser tab automatically at your new app by typing:
gcloud app browse
What's next
As an extension of handling user data, you might want to use Cloud SQL, Cloud Datastore, or Cloud Storage to store the data: