程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> 用Groovy編寫Google App Engine應用

用Groovy編寫Google App Engine應用

編輯:Groovy

Google的Google App Engine 雲計算平台現在已 經支持了除了Python以外的其他的語言:即Java和Groovy!

現在,你可以通過Groovy高效的編寫你的Google App Engine 應用了。

幾星期以前,SpringSource Groovy團隊和Google App Engine Java 團隊緊密攜手,仔細的處理了大 量的細節問題,以確保這門獲獎的頗為流行的基於JVM的動態語言--Groovy可以很好的運行在這個精彩的 平台上。他們針對那些限制嚴格以及有很強的安全管理政策的領域為Groovy編寫了一些補丁,之後在預定 日期發布了 Groovy 1.6.1 更新。在新版本中,你可以通過直接在你的 WEB-INF/lib 目錄下部署 "groovy-all" JAR 文件開始通過 Groovy 編寫你的應用,並運行在 Google 的內核上。

在文本的其余部分,我將帶你通過一些簡單的步驟來創建你的第一個基於Groovy的App Engine Web應 用。由於他們在App Engine 的文檔裡列的很清楚,這裡我會跳過基本的安裝步驟,並且我將著重於構建 Groovy 應用本身的方方面面。就像你即將看到的一樣,這會相當的輕松。

開始入門

首先,顯然,你得在 Google App Engine 上注冊一個Google帳號,以便你可以在該平台創建應用,並 能將其上載到雲端。你也會需要下載並安裝Google App Engine Java SDK。上述所有的步驟,你應該參看 在線文檔,你可以在裡面找到所有你需要的細節。

一旦 SDK 安裝完畢,為了本次課程所需,你還應該下載並安裝 Groovy1.6。 本文前面的步驟需要我 們用Groovy編譯一個servlet,你會用到 Groovy,但是在余下的部分,由於我們將使用Groovy在運行時自 編譯的 Groovlets,所以你就不在需要它了。

有了 Java, SDK, Groovy 安裝,我們就可以繼續了,通過 Groovy-ready 項目模板建立一個新的項 目。下載摘要,解壓到一個你喜歡的目錄下,下面讓我們看看裡面都有什麼!這感覺就像拆開聖誕禮物的 包裝,對嗎?

我把這個模板項目解壓到了一個叫 gaedemo 的目錄下。在這個目錄的根,你會看到一個包含著所有我 們的 Groovy 和 Java 源代碼需要去編譯的 src 目錄 (servlets, domain classes, utility classes, 等等)。 deploy 目錄基本上同我們將要輸出的webapp一致:你會看到一個包含所有編譯過的類的 classes 目錄, 存放各種 JAR 文件 lib 目錄(Groovy JAR 和 Google App Engine 自己的 API JAR 一 樣), 以及存放 Groovlet 的 groovy 目錄。在本文的第二部分,我們將開發這些 Groovlets。 你也當 然會注意到 appengine-web.xml 文件,它是一個 App Engine 特殊描述器。你可以能找到標准的 web.xml, 在它裡面,你可以定義你自己的 servlets, 你的映射關系以及其它的東西。

編譯類

在對這個項目結構有個大概的印象之後,讓我們關鍵的文件都包括哪些.就讓我們從 build.groovy 文 件開始把。我利用 Groovy 的 AntBuilder (構建在Ant之上的一個輕量級的領域特定語言) 替代了直接 創建一個 Ant 編譯文件:

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 代碼和指明了編譯器,這個編譯器(譯者:實際上就是 org.codehaus.groovy.ant.Groovyc ,這是個Java類,顯然它的作用就是把 Groovy 的代碼翻譯成Java代 碼,剩下的事情就由 javac 來搞定了) 通過將編譯Java類的任務委托給 javac 編譯起而做到聯合編譯 Groovy 及其 Java 的依賴類 -- 當然,是否真能做到讓這兩種語言無縫集成,還有代證明。在定義完這 個任務之後,將classpath設成 WEB-INF/lib 下面的JAR文件和編譯過的 classes,我們就可以啟動來編 譯源代碼了。

為了執行這個 build 文件, 利用你已經安裝的 Groovy, 你只需要下面的命令去編譯你的項目

groovy build

設置項目描述符

在 appengine-web.xml 文件中包含著一些Google App Engine 部署你項目時需要的原數據。尤其的, 這裡是你定義應用的名稱以及版本號的地方,你需要將你自己應用的名稱更新進去。到現在,我們的描述 符看起來就像下面的樣子:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>myowngroovy</application>
<version>1</version>
</appengine-web-app>

創建你第一個 Servlet

在跳入 Groovlets 之前,我們將從一個不錯的老 Servlet 開始!由於Google App Engine 支持 Servlet 2.5 規范,我們可以些一個簡單的 "Hello World!" Servlet。 我們在 src 目錄創建一個名為 HelloServlet.groovy 的文件,它包含下面的代碼:

import javax.servlet.http.*

class HelloServlet extends HttpServlet {
void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.contentType = "text/plain"
resp.writer.println "Hello Google App Engine Groovy!"
}
}

雖然你會注意到 Groovy 提供的更簡單的語法: 少了分號, public 關鍵字, 屬性的 getter/setter 以及分號的省略都是可選的,但是這看起來更想一個普通 Java servlet。

下一步: 我們需要在 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 配置完畢,別忘了用我們的小 build 文件來編譯 servlet

groovy build

把你的應用上載到雲端

如果你的 Google App Engine SDK 配置正確,你應該可以在你的項目根目錄處運行下面的命令:

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...

如果你看到了 “Success” 這個字, 那是當然的了,因為所有的事情進行十分順利,而你的應用也 已經准備就緒了。 通過類似下面的 URL 來訪問這個 servlet (根據你應用的名字而所有不同): http://myowngroovy.appspot.com/hello,你將會看到這條消息:“Hello Google App Engine Groovy! ”

求救於 Groovlets

利用 Groovy 語言編寫老 Java servlet 的確很讓人興奮,對嗎? 這種感覺就像你第一次作出了一個 servlet 一樣,對嗎?不是那麼的一樣,它好像幾乎已經不那麼時髦了。幸運的是, Groovy 以及 Groovlets 來了。

在極小的容器中, Groovlets 只不過就是存放在 WEB-INF/groovy 目錄下的 Groovy 腳本,Groovy servlet 調度器被用來(譯者:在運行時) 編譯和渲染這些腳本。

首先,讓我們更新 web.xml,增加一個 GroovyServlet, 以及一個 URL 映射,使得所有能被模式 *.groovy 匹配上的 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 的變量名范圍(譯者:原文是 variable bound, 我估計是類似於 包路徑或者名稱空間的概念)來同 MarkupBuilder 的實例進行綁定。它(譯者 :指 MarkupBuilder)是一個為了創建各種 XML 或 HTML 標記又小又有用的領域特定語言。 MarkupBuilder 用更清晰更 Groovy 的語法替代了依靠一行一行通過 println 語句輸出HTML字符串的形 式。 當然,你可以通過混合一些循環和條件讓這個標記語言更加動態。

在重新上傳這個應用之後,你現在可以通過 http://myowngroovy.appspot.com/hello.groovy 來訪問 這個 Groovlet 了。這次你就不需要編譯任何東西了,因為編譯這些 Groovlets 腳本是 GroovyServlet 的事情。

簡單嗎?

接下來...

我們僅僅是觸及了一些很膚淺的情況,但是這足以讓你對 Groovy 入門了。在你在 Google App Engine APIs 探索的同時,這裡還有一些你可以通過你的 Groovlets 和 servlets 使用的破有意思的服 務:

◆一個數據存儲的接口 (datastore API),你可以通過底層的無 schema 的API 或者 JDO 存儲你的 對象

◆一個用來可以進行各種轉換和應用濾鏡圖像接口

◆一個用來發送電子郵件的郵件接口

◆一個用來緩存重量數據結構或者計算結果的內存緩沖接口(memcache API)

◆一個用來獲取遠端 URL 內容的 URL 獲取接口

◆一個使用 Google 用戶帳戶來進行驗證的用戶接口

當然,所有的這些服務都可以被你的 Groovlet 腳本調用。 你也可以使用第三方庫並把他們放在你的 WEB-INF/lib 目錄裡面。研究一下更多的可用接口,看看在它們上面構建一個瘦 Groovy 層是否會讓它們 更容易被使用,通過更Groovy的方式,這會很有趣。

如今, Groovlets 和普通的 servlet 被徹底的支持了,但是例如, Grails 應用還是不能跑在當前 版本的 Google App Engine 上。我們將繼續和 Google App Engine 團隊一道努力,以便讓你可以通過 Grail 讓更多的高級應用(譯者:和Groovy)跑的一樣好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved