除了 web.xml 部署描述符外,App Engine Java 应用程序还使用名为 appengine-web.xml 的配置文件来指定应用程序的注册应用程序 ID 以及最新代码的版本标识符,并确定在应用程序的 WAR 中哪些文件是静态文件(如图像),哪些是应用程序使用的资源文件。当您上传应用程序时,AppCfg 命令将使用这些信息。
App Engine Java 应用程序必须在其 WAR 中的 WEB-INF/ 目录下拥有名为 appengine-web.xml 的文件。这是一个 XML 文件,其根元素为 <appengine-web-app>。一个指定了应用程序 ID、版本标识符且没有静态文件或资源文件的最小文件应如下所示:
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>application-id</application> <version>1</version> </appengine-web-app>
<application> 元素包含应用程序 ID。这是您在管理控制台中创建应用程序时注册的应用程序 ID。当您上传应用程序时,AppCfg 将从该文件获得应用程序 ID。
<version> 元素包含最新版本的应用程序代码的版本标识符。它可以是任意字符串。AppCfg 在上传应用程序时使用该版本标识符,通知 App Engine 按照给定的标识符创建新的应用程序版本,或在应用程序版本已存在的情况下将其替换为给定的标识符。可使用诸如 http://version-id.latest.application-id.appspot.com 的网址对新的应用程序版本进行测试。可使用管理控制台选择用户能够看到的应用程序版本(“默认”版本)。
<static-files> 元素和 <resource-files> 元素将在下一部分中说明。
可在 SDK 的 docs/ 目录下找到该文件的 DTD 和架构规范。
很多网络应用程序都有直接提供给用户浏览器的文件,如图像、CSS 样式表或浏览器 JavaScript 代码。这些文件之所以被称为静态文件,是因为它们不会发生更改且能够从专门用于静态内容的网络服务器受益。App Engine 从专用服务器和缓存提供静态文件。
可使用文件系统由应用程序代码访问的文件称为 resource files。这些文件与应用程序一起存储在应用程序服务器上。
默认情况下,除了 JSP 文件(这类文件将被编译到 Servlet 类中并映射到网址路径)和 WEB-INF/ 目录下的文件(这类文件从不作为静态文件提供且始终可用于应用程序的资源文件),WAR 中的所有文件都被视为静态文件和资源文件。
可使用 appengine-web.xml 文件中的元素调整哪些文件将被视为静态文件,哪些文件将被视为资源文件。<static-files> 元素可指定文件路径匹配样式以加入静态文件列表和从中排除,从而修正默认行为。同样,<resource-files> 元素可指定哪些文件被视为资源文件。
路径样式是使用 0 个或多个 <include> 和 <exclude> 元素指定的。在样式中,* 代表文件名或目录名中的 0 个或多个任意字符,而 ** 代表路径中的 0 个或多个目录。
<include> 元素覆盖包括所有文件的默认行为。在所有 <include> 样式(以及默认值,如果未提供显式 <include>)后应用 <exclude> 元素。
例如,要指定除 data/ 目录以及所有子目录下的文件外,所有文件名以 .png 结尾的文件均为静态文件(包括 WEB-INF/ 中的文件):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
同样,要指定除 feeds/ 目录以及所有子目录下的文件外,所有文件名以 .xml 结尾的文件均为资源文件(包括 WEB-INF/ 外的文件):
<resource-files>
<include path="/**.xml" />
<exclude path="/feeds/**.xml" />
</resource-files>
静态文件是使用根据文件扩展名选择的 MIME 类型提供的。要提供带有自定义 MIME 类型的文件,应将该文件设为资源文件而不是静态文件,并创建提供自定义 MIME 类型数据的 Servlet。
appengine-web.xml 文件可定义应用程序运行时所设置的系统属性和环境变量。
<system-properties>
<property name="myapp.maximum-message-length" value="140" />
<property name="myapp.notify-every-n-signups" value="1000" />
<property name="myapp.notify-url" value="http://www.example.com/signupnotify" />
</system-properties>
<env-variables>
<env-var name="DEFAULT_ENCODING" value="UTF-8" />
</env-variables>
如果您的应用程序使用安全网址(SSL,如 https://...),则必须为 appengine-web.xml 文件中的应用程序启用 SSL。要启用 SSL,请将 <ssl-enabled> 元素添加到文件:
<ssl-enabled>true</ssl-enabled>
有关定义安全网址的详细信息,请参阅部署描述符:安全网址。
App Engine 使用 Servlet 会话接口来包括会话实现。该实现可使用 App Engine 数据存储区和 Memcache 来存储会话数据。
该功能默认关闭。要将其打开,请将以下内容添加到 appengine-web.xml:
<sessions-enabled>true</sessions-enabled>
该实现可使用带有前缀 _ahs 的键创建 _ah_SESSION 类型的数据存储区实体和 Memcache 实体。