领先一步
VMware 提供培训和认证,助您快速提升技能。
了解更多[caption id="attachment_1577" align="alignright" width="250" caption="Google App Engine Groovy"][/caption]
Google 刚刚宣布,他们的 Google App Engine 云托管平台现在支持除 Python 之外的其他语言:即 Java 和 Groovy!
您现在可以有效地使用 Groovy 编写 Google App Engine 应用程序!
几周前,SpringSource Groovy 团队和 Google App Engine Java 团队携手合作,共同努力解决了细节问题,以确保流行且屡获殊荣的 JVM 动态语言 Groovy 能够在此令人兴奋的平台上良好运行。在为 Groovy 创建了一些关于受限和严格安全管理器策略的补丁之后,Groovy 开发团队集成了这些补丁并发布了更新的 Groovy 1.6.1 版本。通过此新版本,您可以直接在 WEB-INF/lib 目录中使用“groovy-all”JAR,并立即开始使用 Groovy 编写应用程序,并在 Google 的基础架构上托管它们。
在本文的其余部分,我将引导您完成一些简单的步骤,让您构建第一个由 Groovy 驱动的 App Engine webapp。我将跳过基本的安装步骤,因为它们在 App Engine 文档中已经很好地概述和解释了,我将更多地关注构建 Groovy 应用程序本身的方面。正如您将看到的,这相当容易。
安装 SDK 后,在本教程的过程中,您还应该下载并安装 Groovy 1.6。您实际上只需要在本文的第一部分安装 Groovy,在那里我们需要编译 servlet,否则,在本文的其余部分,您将不再需要它,因为我们将使用由 Groovy 运行时本身编译的 Groovlet。
安装 Java、SDK 和 Groovy 后,我们可以继续并从这个Groovy 就绪型项目模板开始一个新项目。下载该框架,将其解压缩到您喜欢的目录中,让我们看看我们有什么!这就像打开圣诞礼物吗?
我已经将模板项目解压缩到名为 gaedemo 的目录中。在此目录的根目录下,您将看到一个 src 目录,其中将包含我们需要编译的所有 Groovy 和 Java 源代码(servlet、域类、实用程序类等)。deploy 目录基本上对应于我们的展开的 webapp:您将看到一个用于编译类的 classes 目录,用于各种 JAR(Groovy JAR 以及 Google App Engine 自身的 API JAR)的 lib,以及用于包含我们在本文第二部分中将开发的 Groovlet 的 groovy。您肯定也注意到了 appengine-web.xml 文件,这是一个 App Engine 特定的描述符。规范的 web.xml 文件也存在,用于定义您的 servlet、映射等等。
def ant = new AntBuilder().sequential { webinf = "deploy/WEB-INF" taskdef name: "groovyc", classname: "org.codehaus.groovy.ant.Groovyc" groovyc srcdir: "src", destdir: "${webinf}/classes", { classpath { fileset dir: "${webinf}/lib", { include name: "*.jar" } pathelement path: "${webinf}/classes" } javac source: "1.5", target: "1.5", debug: "on" } }我们实例化 AntBuilder,为目标 WEB-INF 目录创建一个属性,我们定义 groovyc Ant 任务,它是 Groovy 联合编译器,能够通过将 Java 类的编译委托给 javac 编译器来一起编译 Groovy 和 Java 相互依赖的类——这再次证明了两种语言之间无缝互操作性的证明。在定义该任务后,我们可以使用 WEB-INF/lib 中的 JAR 和已编译的类组成的类路径来调用它以编译我们的源代码。
为了调用该构建文件,如果您已安装 Groovy,您只需使用以下命令来编译您的项目:
groovy build
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>myowngroovy</application> <version>1</version> </appengine-web-app>
import javax.servlet.http.*这看起来非常像一个普通的 Java servlet,尽管您会注意到 Groovy 提供的更简单的语法:缺少分号、可选的 public 关键字、getter/setter 的属性表示法、省略分号。class HelloServlet extends HttpServlet { void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.contentType = "text/plain" resp.writer.println "Hello Google App Engine Groovy!" } }
下一步:我们需要在 web.xml 中引用该 servlet,如下所示:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
配置 servlet 后,我们不应忘记使用我们的小型构建文件编译 servlet:
groovy build
appcfg.sh update deploy/该命令将在第一次使用时提示您输入凭据,进一步的调用将显示类似于以下行的输出:
Reading application configuration data... Beginning server interaction for myowngroovy... 0% Creating staging directory 5% Scanning for jsp files. 20% Scanning files on local disk. 25% Initiating update. 28% Cloning 5 application files. 40% Uploading 1 files. 52% Uploaded 1 files. 90% Deploying new version. 95% Will check again in 1 seconds 98% Closing update: new version is ready to start serving. 99% Uploading index definitions. Update complete. Success. Cleaning up temporary files...如果您看到“成功”一词,那肯定是由于一切进展顺利,并且您的应用程序已准备就绪!从类似于此 URL 的 URL(取决于您选择的应用程序名称)访问 servlet:http://myowngroovy.appspot.com/hello 将向您显示漂亮的“Hello Google App Engine Groovy!”消息!
简而言之,Groovlet 只是存储在 WEB-INF/groovy 中的 Groovy 脚本,它们由 Groovy servlet 分发器呈现,该分发器编译并呈现这些脚本。
首先,让我们更新我们的 web.xml 以将 GroovyServlet 添加到组合中,以及一个用于将所有遵循 *.groovy 模式的 URL 重定向到它的 URL 映射:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <servlet> <servlet-name>GroovyServlet</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GroovyServlet</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
完成此操作后,我们在 WEB-INF/groovy 下创建我们的第一个 Groovlet 脚本,并将其命名为 hello.groovy:
html.html { head { title "Hello" } body { p "Hello Groovy World!" } }
此 Groovy 脚本使用绑定到脚本绑定的 html 变量,该变量是MarkupBuilder的实例。它是一个用于创建任何类型的 XML 或 HTML 标记的小型实用程序 DSL。与其使用 println 语句以字符串形式输出原始 HTML,MarkupBuilder 提供了更简洁和更 Groovy 的语法。当然,您可以通过混合一些循环或条件等来使此标记尽可能动态。
重新上传应用程序后,您现在可以通过访问此 URL 来访问此 Groovlet:http://myowngroovy.appspot.com/hello.groovy。这次无需编译任何内容,因为这是 GroovyServlet 编译这些 Groovlet 脚本的工作。
这很容易,不是吗?
目前,完全支持 Groovlet 和普通 servlet,但例如,Grails 应用程序在当前版本的 Google App Engine 上不起作用。我们将继续与 Google App Engine 团队合作,以便您也可以使用 Grails 来处理更苛刻的应用程序。
如果您想了解有关 Groovy 和 Grails 的更多信息,如何编写由 Groovy 驱动的 App Engine 应用程序,您也可以考虑注册并参加GR8 大会,这是一个专门针对 Groovy、Grails 和 Griffon 的大会,演讲者是这些技术的专家或制造者,并设有动手实践课程。随着 Groovy 在 App Engine 中得到支持的公告,毫无疑问,我们也将在大会上讨论这个问题!
我们期待您对 App Engine 上 Groovy 的反馈,也非常乐意听取您关于如何进一步改进云端 Groovy 应用开发体验的任何建议。