Google App Engine 可让您在 Google 的基础架构上运行您的网络应用程序。App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务。
您可以使用 Google 企业应用套件通过自己的域名(例如 http://www.example.com/
)提供应用程序。或者,您可以使用 appspot.com
域上的免费域名来为您的应用程序提供服务。您可以与全世界的人共享您的应用程序,也可以限制为只有贵组织的成员可以访问。
应用程序环境
通过 Google App Engine,即使在负载很重和数据量极大的情况下,也可以轻松构建能安全运行的应用程序。App Engine 包括以下功能:
- 动态网络服务,提供对常用网络技术的完全支持
- 持久存储空间,支持查询、分类和事务
- 自动扩展和负载平衡
- 用于对用户进行身份验证和使用 Google 帐户发送电子邮件的 API
- 一种功能完整的本地开发环境,可以在您的计算机上模拟 Google App Engine
- 用于在指定时间和定期触发事件的计划任务
您的应用程序可在以下两个运行时环境之一中运行:Java 环境和 Python 环境。各环境均为网络应用程序开发提供标准协议和常用技术。
沙盒
应用程序在安全环境中运行,该安全环境仅提供对基础操作系统的有限访问权限。这些限制让 App Engine 可以在多个服务器之间分发应用程序的网络请求,并可以启动和停止服务器以满足访问量需求。沙盒将您的应用程序隔离在它自己的安全可靠环境中,该环境与网络服务器的硬件、操作系统和物理位置无关。
安全沙盒环境的限制示例包括:
- 应用程序只能通过提供的网址抓取以及电子邮件服务访问互联网中的其他计算机。其他计算机只能通过在标准端口上进行 HTTP(或 HTTPS)请求来连接至该应用程序。
- 应用程序无法向文件系统写入。应用程序只能读取通过应用程序代码上传的文件。该应用程序必须使用 App Engine 数据存储区、memcache 或其他服务存储所有在请求之间持续存在的数据。
- 应用程序代码仅在响应网络请求或 cron job 时运行,且任何情况下必须在 30 秒钟内返回响应数据。请求处理程序不能在响应发送后生成子进程或执行代码
该环境下你的应用程序可执行代码;可存储和查询 App Engine 数据存储区中的数据;可使用 App Engine 邮件、网址抓取和用户服务;可检查用户的网络请求以及准备响应。
沙盒
为了使得 App Engine 能够跨多个网络服务器分配对于应用程序的请求,并且防止应用程序彼此干扰,请在受限制的“沙盒”环境中运行应用程序。在这种环境中,该应用程序可执行代码;可存储和查询 App Engine 数据存储区中的数据;可使用 App Engine 邮件、网址抓取和用户服务;可检查用户的网络请求以及准备响应。
App Engine 应用程序无法:
- 向文件系统写入。应用程序必须使用 App Engine 数据存储区存储永久数据。允许从文件系统中读取,并且可使用与该应用程序一起上传的所有应用程序文件。
- 打开套接字或直接访问另一主机。应用程序可使用 App Engine 网址抓取服务分别向端口 80 和 443 上的其他主机发出 HTTP 和 HTTPS 请求。
- 产生子进程或线程。必须在几秒钟内于单个进程中处理对应用程序的网络请求。响应时间很长的进程会被终止,以避免使网络服务器负载过重。
- 进行其他类型的系统调用。
线程
Java 应用程序无法新建 java.lang.ThreadGroup
或 java.lang.Thread
。这些限制也适用于利用线程的 JRE 类。例如,应用程序无法新建 java.util.concurrent.ThreadPoolExecutor
或 java.util.Timer
。应用程序可以对当前线程执行操作,如Thread.currentThread().dumpStack()
。
文件系统
Java 应用程序无法使用任何用来写入文件系统的类,如 java.io.FileWriter
。应用程序可以使用诸如 java.io.FileReader
的类从文件系统中读取自己的文件。应用程序也可以通过例如 Class.getResource()
或 ServletContext.getResource()
来访问作为“资源”的自身文件。
只有视为“资源文件”的文件才可以由应用程序通过文件系统访问。默认情况下,WAR 中的所有文件都是“资源文件”。您可以使用appengine-web.xml 文件将文件从该组中排除出去。
java.lang.System
禁用不适用于 App Engine 的 java.lang.System
类的功能。
以下 System
方法在 App Engine 中不起作用:exit()
、gc()
、runFinalization()
、runFinalizersOnExit()
以下 System
方法返回 null
:inheritedChannel()
、console()
应用程序无法提供或直接调用任何本机 JNI 代码。以下 System
方法引发java.lang.SecurityException
:load()
、loadLibrary()
、setSecurityManager()
反射
允许应用程序对自己的类进行完全、无限制的反射访问。它可以查询任何私有成员,使用java.lang.reflect.AccessibleObject.setAccessible()
,以及读取/设置私有成员。
应用程序还可以对 JRE 和 API 类(如 java.lang.String
和 javax.servlet.http.HttpServletRequest
)进行反射。但是,它只可以访问这些类的公共成员,而不可以访问受保护成员或私有成员。
应用程序无法对不属于自己的任何其他类进行反射,也无法使用 setAccessible()
方法来避开这些限制。
自定义类载入
App Engine 完全支持自定义类载入。但是请注意,App Engine 将覆盖所有的 ClassLoader,以将相同的权限分配给所有由应用程序载入的类。如果执行自定义类载入,在载入不信任的第三方代码时要小心。
JRE 白名单
对 Java 标准库(Java 运行时环境或 JRE)中类的访问仅限于 App Engine JRE 白名单中的类。
日志
应用程序可以使用 java.util.logging.Logger 将信息写入应用程序日志。您可以使用管理控制台查看和分析您的应用程序的日志数据,或使用appcfg.sh request_logs 下载日志数据。管理控制台可以识别 Logger
类的日志级别,并且以交互方式显示不同级别的消息。
servlet 写入标准输出流 (System.out
) 和标准错误流 (System.err
) 中的所有内容都由 App Engine 捕捉,并记录在应用程序日志中。写入标准输出流的行将以“INFO”级别记录,写入标准错误流的行将以“WARNING”级别记录。任何记录到输出或错误流的日志记录框架(如 log4j)都适用。但为了细化对管理控制台日志级别显示的控制,日志记录框架必须使用 java.util.logging
适配器。
import java.util.logging.Logger;
// ...
public class MyServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(MyServlet.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
log.info("An informational message.");
log.warning("A warning message.");
log.severe("An error message.");
}
}
App Engine Java SDK 在 appengine-java-sdk/config/user/
目录中包含模板 logging.properties
文件。要使用它,请将该文件复制到 WEB-INF/classes
目录(或 WAR 中的其他位置),然后将系统属性 java.util.logging.config.file
复制到 "WEB-INF/classes/logging.properties"
(或与应用程序根相关的任何所选路径)。您可以在 appengine-web.xml
文件中设置系统属性,如下:
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
...
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties" />
</system-properties>
</appengine-web-app>
Eclipse Google 插件新项目向导将为您创建这些日志记录配置伟建,并自动将它们复制到 WEB-INF/classes/
。对于java.util.logging
,必须设置系统属性才能使用此文件。
环境
所有系统属性和环境变量都是应用程序专有的。设置系统属性只会影响该属性的应用程序视图,不会影响到 JVM 的视图。
您可以在部署描述符中为应用程序设置系统属性和环境变量。
App Engine 在应用程序服务器上初始化 JVM 时设置以下系统属性:
file.separator
path.separator
line.separator
java.version
java.vendor
java.vendor.url
java.class.version
java.specification.version
java.specification.vendor
java.specification.name
java.vm.vendor
java.vm.name
java.vm.specification.version
java.vm.specification.vendor
java.vm.specification.name
user.dir
分享到:
相关推荐
GAE上可以用的JAVA Blog源代码 可以在GAE上直接使用,支持图片上传等。 源代码是修改其他网友的普通blog程序而来,只做了必要的修改,原结构保留 最新版本请去主页下载 http://redpower1998.appspot.com 主页包括...
Google App Engine for java.GAE for java,Eclipse开发环境,入门上手简单快速。
基于Google App Engine(GAE)的Java和GWT应用开发_Google App Engine Java and GWT Application Development Nov.2010
中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...
GAE--java使用入门.doc
从Google 上扒下来的! java 的中文文档~~ 方便大家学习! 打开"code.google.com\intl\zh-CN\appengine\docs"文件夹下的 docs.html 文件! 这是起始页!
GAE虽然支持java了,但不幸的是依然不支持php 但是我们可以使用基于java的Quercus基本上可以100%的支持PHP语言
Goolge app engine for java英文帮助文档 最新的哦!
jiql是在JAVA GAE上访问Google Datastore的JDBC wrapper jiql支持标准的sql语言进行访问原版的官方主页 www.jiql.org 由于原版源代码存在一些问题,所以对改版本做了一些修正,并把修正后的源代码发布在此。版权...
基于Google.App.Engine(GAE)的Java和GWT应用开发
gae-java-mini-profiler.zip,google a p p engine java runtime的mini profiler(灵感来自于https://github.com/kamens/gae_mini_profiler上的python gae_mini_profiler和...
gae-java-first Java 中的 Google Appengine 示例
[基于Google.App.Engine(GAE)的Java和GWT应用开发].(Google.App.Engine.Java.and.GWT.Application.Development).Daniel.Guermeur.文字版
设计师可以改变的外观网页程序员无需更改或重新编译代码,因为应用程序逻辑( Java程序)和网页设计( FreeMarker模板)分开。 模板不会成为污染的复杂程序片段。 这一分离是有益的,在网页代码中,你甚至会觉得是...
GAE: Apress.-.Beginning Java Google App Engine (2009).pdf O'Reilly.-.Programming Google App Engine (2010).pdf O'Reilly.-.Using Google App Engine (2009).pdf Packtpub.-.Google App Engine Java and GWT ...
GoogleAppEngine(GAE)的定时器java源代码。 GoogleAppEngine(GAE)的定时器java源代码。
queue4gae Queue4GAE 是 Google AppEngine 的 Java 任务队列包装器,它用基于 JSON 的实现替换了内置的 DeferredTask 序列化。 使用 Queue4GAE 实现的任务使用AppEngine 中包含的相同任务队列服务。 考虑使用 JSON ...
Google app engine提供了虚拟服务器,但是目前只能支持python和java语言。php语言只有通过认证才可以使用,但是很难通过认证。本人做了一个通过quercus使php项目能运行到GAE上,这是简单的项目内容
盖伊 使用Google App Engine(GAE)进行项目。 技术领域 Java Spring框架