App Engine Java 应用程序使用 Java Servlet 标准与网络服务器环境交互。应用程序的文件(包括已编译的类、JAR、静态文件和配置文件)使用 Java 网络应用程序的 WAR 标准布局组织在目录结构中。您可以使用任何想用的开发过程来开发网络 Servlet 并生成 WAR 目录。(SDK 目前尚不支持 WAR 档案文件。)
对于本教程,我们将对所有项目文件使用一个名为 Guestbook/ 的目录。名为 src/ 的子目录包含 Java 源代码,名为 war/ 的子目录包含以 WAR 格式组织的完整应用程序。我们的生成过程会编译 Java 源文件,并将编译的类放在 war/ 中的适当位置。
完整的项目目录如下:
Guestbook/
src/
...Java source code...
META-INF/
...other configuration...
war/
...JSPs, images, data files...
WEB-INF/
...app configuration...
lib/
...JARs for libraries...
classes/
...compiled classes...
如果使用的是 Eclipse,则通过点击工具栏上的“新建网络应用程序项目”按钮创建一个新的项目:
赋予项目 Guestbook 的“项目名称”以及 guestbook 的“包”。取消选中“使用 Google Web 工具包”,并确保选中了“使用 Google App Engine”。有关详细信息,请参阅使用 Eclipse Google 插件。向导将创建目录结构,以及下文说明的文件。
如果您没有使用 Eclipse,则创建上文所述的目录结构。当您阅读本部分中介绍的每个文件时,可以使用给定的位置和名称创建文件。
您还可以在 appengine-java-sdk/demos/new_project_template/ 目录中复制 SDK 内含的新的项目模板。
App Engine Java 应用程序使用 Java Servlet API 与网络服务器交互。HTTP Servlet 是处理和响应网络请求的应用程序类。该类扩展 javax.servlet.GenericServlet 类或 javax.servlet.http.HttpServlet 类。
我们的留言簿项目从一个 Servlet 类开始,这是一个简单的显示消息的 Servlet。
如果您没有使用 Eclipse 插件,则创建路径为 src/guestbook/ 的目录,然后创建下文介绍的 Servlet 类文件。
在 src/guestbook/ 目录中,名为 GuestbookServlet.java 的文件具有以下内容:
package guestbook;
import java.io.IOException;
import javax.servlet.http.*;
public class GuestbookServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world");
}
}
当网络服务器收到请求时,其使用一个称为“网络应用程序部署描述符”的配置文件决定调用哪个 Servlet 类。此文件名为 web.xml,位于 WAR 中的 war/WEB-INF/ 目录中。WEB-INF/ 和 web.xml 是 Servlet 规范的一部分。
在 war/WEB-INF/ 目录中,名为 web.xml 的文件具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<servlet>
<servlet-name>guestbook</servlet-name>
<servlet-class>guestbook.GuestbookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>guestbook</servlet-name>
<url-pattern>/guestbook</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
此 web.xml 文件声明名为 guestbook 的 Servlet,并将其映射到 URL 路径 /guestbook。其还称,每当用户抓取一个没有映射到 Servlet 并表示应用程序的 WAR 内的目录路径的网址路径时,服务器应检查该目录中是否存在名为 index.html 的文件,如果发现存在该文件则提供该文件。
App Engine 需要一个额外的配置文件,以指出如何部署和运行应用程序。此文件名为 appengine-web.xml,并和 web.xml 一起位于 WEB-INF/ 中。其包括您的应用程序的注册 ID(Eclipse 创建时 ID 留空,以便您以后填写)、应用程序的版本号以及应作为静态文件(例如图像和 CSS)以及资源文件(例如 JSP 和其他应用程序数据)处理的文件列表。
在 war/WEB-INF/ 目录中,名为 appengine-web.xml 的文件具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application></application>
<version>1</version>
</appengine-web-app>
appengine-web.xml 专用于 App Engine,且不是 Servlet 标准的一部分。您可以在 SDK 中的 appengine-java-sdk/docs/ 目录中找到描述此文件的格式的 XML 架构文件。有关此文件的详细信息,请参阅配置应用程序。
App Engine SDK 包括一个您可用来测试您的应用程序的网络服务器应用程序。服务器模拟 App Engine 环境和服务,其中包括沙盒限制、数据存储区和服务。
如果您正在使用 Eclipse,则您可以在 Eclipse 调试器中启动开发服务器。在运行菜单中,选择调试方式 > 网络应用程序。(如果您没有看到此菜单选项,则选择窗口菜单 > 重置视景...,点击确定,然后再次尝试运行菜单。)有关创建调试配置的详细信息,请参阅使用 Eclipse Google 插件。
如果没有使用 Eclipse,请参阅使用 Apache Ant 以获取可生成项目并启动开发服务器的生成脚本。要以此生成脚本启动服务器,请输入下列命令:ant runserver。要停止服务器,请按 Control-C。
启动服务器,然后在您的浏览器中访问以下网址:
服务器调用 Servlet,并在浏览器中显示消息。
您现在完成了 App Engine 应用程序!您可以立即部署该简单的问候并与全球用户共享。
此应用程序向所有用户显示一条通用问候。让我们添加功能以自定义针对每位使用 Google 帐户的访问者的问候。
继续转至使用用户服务。