虽然经常见到云计算的相关新闻,而且在CSDN的论坛里也解答过关于Google App Engine持久化方面的问题,但并没有将这两者联系起来。我一直以为GAE是一个类似于Spring或者Hibernate一样的开源项目罢了。最近构思技术族谱这个开源项目的时候,想先找一个免费的jsp空间做做前期测试,竟然发现GAE就是Google的云计算平台,其提供的免费流量和计算能力还是相当可观的,这对我来说,无疑是天上掉下一块大馅饼。
使用Google提供的Eclipse插件,开发还是很便利的,跟写普通的JAVA web程序也没有太大的差异,不过随插件提供的本地模拟环境还是和部署后的真实环境有些差异,从开始做,到真正把一个最简单的功能(Echo)成功上线,大概花费了三天的业余时间,并遇到了几个小问题,在这里总结一下,希望对大家有用。
我的GAE版本:1.2.2
第一点,算是个注意事项吧。
GAE的插件在每次打包时,会自动清理WEB-INF/classes目录,所以struts.xml,log4j.properties等配置文件无法直接放在该目录里,可以放在src目录,或者可以再建一个独立的目录,比如cfg存放配置文件,并将该目录加为class目录即可。
第二点,JSTL标签默认无法使用(不报错,也不被解析)。
需要在jsp页面的page direction中增加isELIgnored="false",比如:
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" isELIgnored="false"%>
官方说这可能跟他们使用的Jasper版本有关,也许在下一次升级的时候会改进。参见:http://groups.google.com/group/google-appengine-java/msg/da389df15e056697?hl=en
第三点,中文问题。
在windows上开发,默认文件编码是GBK,这时候如果JSP页面也将encoding设置为GBK的话,通常需要增加Filter来实现编码转换来消除乱码。我把整个项目全部改成UTF-8,也就是文件编码UTF-8,而且jsp中指定的charset也是UTF-8,中文问题可以自然解决(不用增加额外的filter)。
第四点,整合了Struts2,但默认情况下,由于ONGL权限导致部署后的应用访问失败。
这个问题在本地测试不会出现,但部署上去就会抛出如下异常:
错误信息:
08-31 08:37AM 19.209 /xxxxxxx.action?fromUrlEncode=%E7%BC%96%E7%A0%81&fromUrlNonEncode=%E6%9C%AA%E7%BC%96%E7%A0%81 404 86ms 158cpu_ms 0kb Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),gzip(gfe)
See details
117.79.68.140 - - [31/Aug/2009:08:37:19 -0700] "POST /xxxxxxxx.action?fromUrlEncode=%E7%BC%96%E7%A0%81&fromUrlNonEncode=%E6%9C%AA%E7%BC%96%E7%A0%81 HTTP/1.1" 404 0 "http://jszupu.appspot.com/xxxxxxx.jsp" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),gzip(gfe)" "jszupu.appspot.com"
官方说是因为实际运行环境的安全设置和插件带的模拟环境不太一样,并给出了一个解决方案,需要增加一个Listener,listener内容如下:
Java code 1. public class OnglPermissionListener implements ServletContextListener{
2. public OnglPermissionListener() {
3. }
4.
5. public void contextInitialized(ServletContextEvent sce) {
6. OgnlRuntime.setSecurityManager(null);
7. }
8.
9. public void contextDestroyed(ServletContextEvent arg0) {
10. }
11.
12. }
官方关于这个问题的讨论请参见:http://groups.google.com/group/google-appengine-java/browse_thread/thread/19018b0317f27817
第五点,如果使用了标签文件,则本地可测试通过,但部署时出错。
标签文件是指在WEB-INF/tags目录下编写的JSTL自定义标签,不是指的用TLD文件定义的标准JSP自定义标签。
如果用到了这种标签文件,那么在部署的时候会出错:
2009-9-5 19:35:04 org.apache.jasper.compiler.Compiler generateClass
严重: Javac exception
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
关于这个问题,google官方也只给出了一个很差的解决方案,就是把jre/lib下的tools.jar拷贝到AppEngine的安装目录/lib/share,相关问题描述和讨论过程参见:
http://groups.google.com/group/google-appengine-java/browse_thread/thread/225d7a555cbc0100/1a9cd7c6f39e663a?lnk=raot
http://groups.google.com/group/google-appengine-java/browse_thread/thread/175e70cc0c93ded9
第六点,标签文件中的中文乱码。
JSP页面用UTF-8,中文没有任何问题,但标签文件用UTF-8就不行,这个我没有找到解决方案,网上讨论的资料也很少,不知道是不是跟我机器环境有关,最后干脆在标签文件中不写中文,全用Resource Bundle来做。
第七点,jstl标签的应用方式问题。
在jsp中,jstl标签可以用如下URL引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
而在标签文件中,只能用
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
才有效,参见:
http://groups.google.com/group/google-appengine-java/browse_thread/thread/affd7e7a83f614e1
欢迎大家交流使用心得。
分享到:
相关推荐
总结起来,Google App Engine 提供了一个便捷的平台,让开发者可以快速地构建和部署 Web 应用。通过本教程,你可以了解从安装插件、创建项目到部署应用的整个流程,为你的开发工作打下基础。继续深入学习 Google App...
### Google App Engine for Java中文API知识点详解 #### 一、Google App Engine for Java概览 - **背景介绍**: - Google App Engine最初是专为Python开发者设计的平台,但随着时间的发展,为了满足更广泛开发者...
总结起来,Google App Engine是一个强大的云应用开发平台,提供了一整套服务来支持各种类型的应用开发。在这个例子中,我们看到一个基于搜索引擎的应用,涉及到数据处理、用户界面和云服务的充分利用。开发者可以...
【Google AppEngine 入门】 Google AppEngine 是一个由谷歌推出的云服务平台,旨在为开发者提供构建、运行和扩展Web应用程序的工具。它允许开发者利用谷歌的基础设施,即强大的计算资源和存储能力,来托管和运行...
- **Lyle Johnson**(高级分析师,Sentar Inc.):本书教会开发者如何利用Google AppEngine提供的服务编写高度灵活和可扩展的Web应用,避免了许多传统开发中的低级部署细节问题。 - **Dorothea Salo**(威斯康星大学...
App Inventor是Google开发的一款图形化编程工具,特别适合初学者用于创建手机应用。这个自定义的app能够连接到具有Wi-Fi功能的设备,比如一个已经开启热点的Wi-Fi模块。 **描述详解:** 描述中提到,该app可以连接...
### 使用Google App Engine #### 背景与概述 《使用Google App Engine》是一本由Charles Severance编写的书籍,于2009年5月由O'Reilly Media出版。该书主要介绍了如何利用Google App Engine(GAE)平台进行Web应用...
总结来说,Google App Engine为Java开发者提供了丰富的API,涵盖了数据存储、任务调度、通信和用户认证等多个方面。了解并熟练运用这些API,你就能充分发挥GAE的优势,构建出能在全球范围内无缝扩展的应用程序。
### Google App Engine 教程知识点总结 #### 一、Google App Engine 概览 - **定义**:Google App Engine (GAE) 是一种基于云端的平台即服务 (PaaS),允许开发者构建和托管应用程序,无需管理底层基础设施。GAE ...
使用App.js 开发的应用可以通过常规的App Store和Google Play进行发布。由于大部分代码是JavaScript,所以App的更新可以做到无需用户手动下载新版本,只需后台热更新,提高了用户体验。 总结来说,App.js 是一款...
总结来说,网站APP封装是将网站内容转变为移动应用的一种高效方式,"promiseducn"提供了方便的工具和服务,使得非专业开发者也能轻松上手。只需准备好你的网站,按照上述步骤,你就能制作出属于自己的APP,进一步...
总结,APP Inventor 2022离线安装版是面向初级开发者和教育领域的理想选择,它的易用性和离线功能使得任何人都能在任何地方享受编程的乐趣和创造力的释放。无论你是初次接触编程的新手,还是希望扩展技能的专业人士...
### Google App Engine 开发人员指南知识点详述 #### 一、概述 Google App Engine (GAE) 是由谷歌提供的一项云服务,允许开发者在其基础设施上部署网络应用。它旨在简化应用开发过程,使得开发者能够专注于编写高...
Google App Engine 是一个强大的云服务平台,允许开发者使用 Python 或 Java 创建并托管应用程序,而无需担心硬件维护和扩展性问题。通过简单的注册流程,用户可以获得免费的存储空间和流量,以及易于部署的应用环境...
总结来说,这个项目是一个利用EXT作为前端框架,Java作为后端编程语言,JDO作为数据持久化机制,在谷歌应用引擎上运行的留言系统。开发者可以通过这个项目学习如何在GAE上搭建一个完整的Web应用,包括前端交互设计、...
总结来说,"appengine-java-sdk"是开发和运行Java应用程序在谷歌AppEngine上的基石,它集成了GWT的支持,为开发者提供了完整的开发、测试和部署解决方案。利用这个SDK,开发者可以构建高效、可扩展的云应用,并享受...
App Inventor 2是一款无需传统编程知识即可开发安卓应用的平台,由谷歌最初的App Inventor 1演变而来,现由麻省理工学院(MIT)维护。其特点是使用拖拽编程方式,使得可视化编程变得简单直观。尽管App Inventor 2在...
### 云应用开发 ——Google App Engine & Google Web Toolkit入门指南 #### 第1章 应该了解下 ##### 1.1 云基本知识 云计算是一种通过互联网提供按需计算资源和服务的方式,包括网络、服务器、存储、应用程序和...