我可以在 App Engine 上使用我最喜欢的框架吗?
App Engine 运行时环境强加了一些约束,以确保可在 App Engine 的分布式基础架构上将应用程序扩展为多个实例。许多框架可在 App Engine 服务器运行时环境内实现无缝工作,但有些不能。其他的可能需要进行某些修改。
因为存在大量的框架,因此我们使用面向社区的方法在此处提供了一个协作页面:是否可在 App Engine 中运行 (Will it Play in App Engine)。请搜索该页面以检查您最喜欢的框架的状态,如果未列出您的框架或您有更新或修正,请提交评论。
我可以在 App Engine 应用程序中使用哪些 JVM 语言?
许多设计为可在 JVM 中运行的语言(如 JRuby、Jython、Scala 以及 Groovy 等)都可在 App Engine 上使用。目前并不是所有这些语言都经过了完整的测试,因此我们使用面向社区的方法在此处提供了一个协作页面:是否可在 App Engine 中运行 (Will it Play in App Engine)。请在测试过您选择的运行时语言后添加相关信息。
为什么我不能从该文件读取?
如果作为应用程序的一部分上传的文件位于以下位置,则可从该文件读取:
- war/WEB-INF
- 与 appengine-web.xml 中的 <resource-files> 模式匹配的位置(默认情况下包括一切)
如果文件位置没有问题,则问题可能是您用于从文件读取的方法未列入白名单。您的应用程序可使用任何可用于从文件系统读取的 IO 类,例如 File
、FileInputStream
、FileReader
或 RandomAccessFile
。有关白名单上列出的类的完整列表,请参阅 JRE 类白名单。
如果您需要获得您自己的资源(如属性文件)的文件访问权限,可将这些文件放入 jar 中,并使用 Class
或 ClassLoader
将其载入。
为什么我不能写入到该文件?
由于应用程序的分布式性质,在 App Engine 中不支持写入到本地文件。因此,应将必须保存的数据存储在分布式数据存储区中。有关详细信息,请参阅关于运行时沙盒的文档。
我可以在应用程序中创建新线程吗?
不可以,App Engine 应用程序无法生成新线程。有关详细信息,请参阅关于运行时沙盒的文档。
我有现有的 Python 应用程序,可以访问现有的 Python 数据存储区吗?
可以,可将 Java 代码上传到您的应用程序(建议指定一个新的版本号),然后您的 Java 代码即可访问数据存储区中的数据。类型名称和属性名称在不同的语言间是一致的。
请注意确保能够将 Python 模型实体中使用的数据类型载入 Java 代码中。
我可以在同一应用程序中运行 Java 和 Python 代码吗?
可以,应用程序的各个版本都必须指定运行时语言,因此可以实现版本 x 运行 Java,而版本 y 运行 Python。还可以使用 Jython。
为什么在试图登录应用程序时会出现 UserServiceFailureException?
如果您将应用程序与 Google 企业应用套件域相关联,则必须在 Google 企业应用套件帐户的子域上访问该应用程序。例如,如果 example.com 是您的 Google 企业应用套件域,则您必须创建一个子域(在此例中使用 www)并将其指向 App Engine 上运行的应用程序。然后您可以从 www.example.com 登录到您的应用程序。如果您尝试通过 app-id.appspot.com 网址访问应用程序,则将无法使用 Google 企业应用套件帐户登录。本限制仅对限制到 Google 企业应用套件域的应用程序适用。
我看到所有请求处理程序均出现初始化失败异常。
您的某个过滤条件、servlet 或 JSP 可能出现错误,阻止了应用程序中所有处理程序的正常初始化。
如果预编译 JSP,可能会引发初始化问题。作为更新过程的一部分,appcfg 命令可为您预编译 JSP,因此您不必进行预编译。
如果出于某种原因需要自己对它们进行预编译,则解决方法是把所有的 JSP 库与应用程序捆绑在一起。其中包括:
- Jasper 运行时和编译器(假设您使用其进行预编译)。
- 所有所需的标签库(包括 JSTL)。
- EL 实现(如果您要使用它)。
在 appcfg 执行离线 JSP 编译的过程中,会将这些库添加到每个应用程序,因此,如果您要自己进行 JSP 编译,则需要做同样的事情。
如果您有使用 Jasper 的预编译 JSP,则必须在 WEB-INF/lib 中包含以下 jar:
- commons-logging-api-1.1.1.jar(或更高版本)
- commons-el.jar
- jasper-runtime.jar
请注意,实际上即使您未使用 EL 和 logging,它们也是必需的。
App Engine 是否支持 Java 企业版?
虽然我们不支持全部 Java EE 规范,但支持其中很多单个组件。有关特定的支持组件和不支持组件列表,请参阅我们用于跟踪框架、语言和库兼容性的协作编辑页面:是否可在 App Engine 中运行 (Will it Play in App Engine)。
如何处理多部分格式数据?或如何处理应用程序的文件上传?
您可以使用 Apache Commons 文件上传包中的类从多部分格式发布中获取上传的文件数据。特别是,您可以如下使用 FileItemStream
、FileItermIterator
和 ServletFileUpload
。
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.io.InputStream;
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileUpload extends HttpServlet {
private static final Logger log =
Logger.getLogger(FileUpload.class.getName());
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
ServletFileUpload upload = new ServletFileUpload();
res.setContentType("text/plain");
FileItemIterator iterator = upload.getItemIterator(req);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if (item.isFormField()) {
log.warning("Got a form field: " + item.getFieldName());
} else {
log.warning("Got an uploaded file: " + item.getFieldName() +
", name = " + item.getName());
// You now have the filename (item.getName() and the
// contents (which you can read from stream). Here we just
// print them back out to the servlet output stream, but you
// will probably want to do something more interesting (for
// example, wrap them in a Blob and commit them to the
// datastore).
int len;
byte[] buffer = new byte[8192];
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
res.getOutputStream().write(buffer, 0, len);
}
}
}
} catch (Exception ex) {
throw new ServletException(ex);
}
}
}
我一直使用端口 8080,如何更改开发应用程序服务器的端口?
如果您看到以下错误消息:
Could not open the requested socket: Address already in use
您可以更改开发服务器监听传入连接的端口。可通过以下参数设置端口:
--port=desired-port-number
如果您使用的是带有 dev_appserver
元素的 ant 目标,则可通过如下方式添加 port
属性指定端口参数。
<dev_appserver war="war" port="desired-port-number"/>
我可以在 App Engine 上使用 Google 数据 API 库吗?
可以,Google 数据 Java 客户端库可在 App Engine 中使用,但必须设置配置选项,以免发生运行时权限错误。请将以下内容添加到 appengine-web.xml
文件:
<system-properties>
<property name="com.google.gdata.DisableCookieHandler" value="true"/>
</system-properties>
如果未包括以上内容,则可能会出现以下异常:
java.security.AccessControlException: access denied (java.net.NetPermission getCookieHandler)
Eclipse 插件不能正常运行。
如果您遇到 Google Eclipse 插件或 Eclipse 本身相关的意外问题,可从查看“错误日志”视图开始解决问题。在 Eclipse 菜单上选择“窗口”->“显示视图”->“其他...”,然后选择“常规”->“错误日志”。可双击各个条目以获取详细信息。此外,还可在名为 your-eclipse-workspace-directory/.metadata/.log
的文件中找到这些问题的文本版本。
我在试图上传时收到“指定的运行时无效”。
在试图使用 appcfg 更新应用程序时,服务器将检查您的帐户以查看您是否有权上传使用 Java 运行时的应用程序。如果您的帐户没有权限,将会显示下列错误消息:
java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/...
400 Bad Request
Invalid runtime specified.
Unable to upload app: Error posting to URL: http://appengine.google.com/api/appversion/...
400 Bad Request
Invalid runtime specified.
要请求获得上传使用 Java 运行时的应用程序的权限,请在以下网址注册:http://appengine.google.com/promo/java_runtime。目前,访问权限仅限于前 10000 个注册的帐户。
appcfg 中的电子邮件参数似乎无法工作。
必须在进行 appcfg 操作之前指定电子邮件命令行参数。例如,下列命令是正确的:
appcfg.sh -e youremail@example.com update app_directory/war
分享到:
相关推荐
Google App Engine for Java为Java开发者提供了一个全面而强大的云计算平台,不仅支持常见的Java Web开发技术,还引入了一系列创新特性,如自动伸缩、易于部署等,极大地降低了构建高性能Web应用的技术门槛。...
Google App Engine for Java 是一个平台,允许开发者使用Java语言构建并托管网络应用程序,该平台运行在Google的强大可扩展基础设施上。这个平台的核心特性是它的Java运行时环境,它基于Java 6虚拟机(JVM),并且...
标题中的"appengine-java-sdk-1.3.1"指的是Google App Engine的Java版本SDK,这是一个用于在Google云平台上开发和部署Java应用程序的工具包。这个SDK包含了运行和测试Google App Engine应用所需的所有组件,包括开发...
The App Engine SDK for Java includes a local development server as well as the tooling for deploying and managing your applications in App Engine. By downloading, you agree to be bound by the Terms ...
### Google App Engine for Java 快速入门指南 v1.2.0 #### 1. AppEngine简介 **1.1 什么是Google App Engine?** Google App Engine (GAE) 是一款由Google提供的平台即服务(PaaS),允许开发者在其基础设施上...
### Google App Engine for Java 快速使用指南 #### 1. App Engine 简介 ##### 1.1 什么是 Google App Engine? Google App Engine 是一项由 Google 提供的云计算平台服务,允许开发者在其基础设施上运行网络应用...
在提供的“App Engine参考资料.doc”文档中,可能包含了关于Google App Engine的详细教程、最佳实践、常见问题解答,或者是关于JasperException和DataNucleus使用时的注意事项。这份文档对于初学者来说是非常宝贵的...
**谷歌AppEngine与Java SDK详解** 谷歌AppEngine(Google App Engine)是一款强大的云计算平台,它允许开发者使用Java、Python、Go或PHP等语言构建并运行Web应用。AppEngine提供了全面的后端服务,包括数据库存储、...
Java版本的App Engine,即我们讨论的"appengine-java-sdk-1.8.7.zip",是Google专门为Java开发者提供的工具包,用于在GAE上开发应用。 **主要组件和功能** 1. **SDK(Software Development Kit)**: SDK包含了开发...
标题中的"appengine-java-sdk-1.5.0.1.zip"表明这是一个关于Google App Engine Java SDK的压缩包,版本号为1.5.0.1。App Engine是由Google提供的一个平台,允许开发者使用Java或Python等语言创建并运行web应用程序。...
利用免费的GAE(Google App Engine)建立强大的Blog(micolog)网站
综上所述,入门教程涉及到了安装与配置Eclipse开发环境、安装Google App Engine插件、创建和配置Web应用项目以及编译时的Java版本兼容性问题,这些知识点对于想要开始使用Google App Engine开发Web应用的开发者来说...
Google App Engine用于Eclipse的插件
在谈论《云端代码Google App Engine编程指南》之前,我们需要先了解一下Google App Engine(GAE)平台的背景知识。Google App Engine(简称GAE)是由Google公司提供的一个无服务器(serverless)的云计算平台,该...
### 编程Google App Engine使用Java - 关键知识点解析 #### 一、书籍概述与背景 《Programming Google App Engine with Java》是一本详细介绍如何利用Google App Engine (GAE) 构建可扩展Java应用程序的专业书籍。...
1. **安装SDK**:下载并安装appengine-java-sdk-1.3.0_d9soft-part1压缩包,解压后配置环境变量,确保开发工具能够找到SDK路径。 2. **创建项目**:使用SDK提供的命令行工具或集成开发环境(IDE,如Eclipse或...