領先一步
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 團隊攜手合作,共同完善細節,以確保流行且屢獲殊榮的 Groovy 動態語言能夠在 JVM 上執行良好。在為 Groovy 建立了一些關於受限和嚴格安全管理器策略的補丁後,Groovy 開發團隊整合了這些補丁,並釋出了更新的 Groovy 1.6.1 版本,為 D-Day 做好了準備。有了這個新版本,您可以直接在 WEB-INF/lib 目錄中使用“groovy-all”JAR,並立即開始用 Groovy 編寫您的應用程式,並將其託管在 Google 的基礎設施上。
在本文的其餘部分,我將帶您透過一些簡單的步驟來構建您的第一個由 Groovy 提供支援的 App Engine Web 應用程式。我將跳過基本的安裝步驟,因為它們在 App Engine 文件中已經非常詳細地概述和解釋,我將更多地關注構建 Groovy 應用程式本身的方面。正如您將看到的,這相當容易。
安裝 SDK 後,在本教程的過程中,您還應該下載並安裝 Groovy 1.6。您實際上只需要在本文的第一部分安裝 Groovy,我們需要編譯一個 servlet,否則,在本文的其餘部分,您將不再需要它,因為我們將使用由 Groovy 執行時本身編譯的 Groovlets。
安裝好 Java、SDK 和 Groovy 後,我們可以繼續進行,並從這個Groovy 就緒專案模板啟動一個新專案。下載這個骨架,將其解壓縮到您喜歡的目錄中,然後讓我們看看我們有什麼!這就像開啟聖誕禮物嗎?
我已將模板專案解壓縮到一個名為 gaedemo 的目錄中。在此目錄的根目錄中,您將看到一個 src 目錄,其中將包含所有需要編譯的 Groovy 和 Java 原始檔(servlets、域類、實用程式類等)。deploy 目錄基本上對應於我們解壓縮的 Web 應用程式:您將看到一個用於編譯類的 classes 目錄,一個用於各種 JAR(Groovy JAR 以及 Google App Engine 自己的 API JAR)的 lib 目錄,以及一個用於包含我們將在本文第二部分開發的 Groovlets 的 groovy 目錄。您肯定還注意到 appengine-web.xml 檔案,這是一個 App Engine 特定的描述符。規範的 web.xml 檔案也存在,用於定義您的 servlets、您的對映等等。
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 聯合編譯器,能夠將 Groovy 和 Java 相互依賴的類一起編譯,透過將 Java 類的編譯委託給 javac 編譯器——這是兩種語言之間無縫互操作性的又一個證明。在該任務定義之後,我們可以呼叫它來編譯我們的原始碼,使用由 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...如果您看到“Success”一詞,那肯定是因為一切都非常順利,並且您的應用程式已準備好訪問!從類似於此的 URL 訪問 servlet(取決於您選擇的應用程式名稱):http://myowngroovy.appspot.com/hello 將向您顯示漂亮的“Hello Google App Engine Groovy!”訊息!
簡而言之,Groovlets 只是儲存在 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 的例項。它是一個小型實用程式 DSL,用於建立任何型別的 XML 或 HTML 標記。MarkupBuilder 提供了更乾淨、更 Groovy 的語法,而不是使用 println 語句輸出原始 HTML 字串。當然,您可以透過混合一些迴圈或條件等來使此標記變得動態。
重新上傳應用程式後,您現在可以透過訪問 URL http://myowngroovy.appspot.com/hello.groovy 來訪問此 Groovlet。這次無需編譯任何東西,因為編譯這些 Groovlets 指令碼是 GroovyServlet 的工作。
這不簡單嗎?
目前,Groovlets 和普通 servlets 完全支援,但例如,Grails 應用程式在當前版本的 Google App Engine 上無法執行。我們將繼續與 Google App Engine 團隊合作,以便您也可以使用 Grails 來處理要求更高的應用程式。
如果您想了解更多關於 Groovy 和 Grails,以及如何編寫 Groovy 驅動的 App Engine 應用程式,您還可以考慮註冊並參加GR8 會議,這是一個專門討論 Groovy、Grails 和 Griffon 的會議,有這些技術領域的專家或創造者作為演講者,並提供實踐操作課程。隨著 App Engine 對 Groovy 支援的宣佈,毫無疑問我們也會在會議上討論這一點!
我們期待閱讀您對 Groovy on App Engine 的反饋,我們很樂意聽取您關於如何進一步改善在雲中開發 Groovy 應用程式體驗的所有建議。