搶先一步
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 版本,以迎接 D-Day。透過這個新版本,您可以直接在您的 WEB-INF/lib 目錄中使用 "groovy-all" JAR,並立即開始以 Groovy 編寫您的應用程式,並將它們託管在 Google 的基礎架構上。
在本文的其餘部分,我將逐步引導您完成一些簡單的步驟,讓您構建您的第一個 Groovy 驅動的 App Engine 網路應用程式。我將跳過基本的安裝步驟,因為這些步驟在 App Engine 文件中已經很好地概述和解釋了,我將更多地關注構建 Groovy 應用程式本身的方面。您將會看到,這非常容易。
一旦 SDK 安裝完成,在本教學課程中,您還應該下載並安裝 Groovy 1.6。您只需要安裝 Groovy 來完成本文的第一部分,在第一部分中,我們需要編譯一個 servlet,否則,對於本文的其餘部分,您將不再需要它,因為我們將使用 Groovlet,它們是由 Groovy 運行時本身編譯的。
在安裝了 Java、SDK 和 Groovy 之後,我們可以繼續下一步,並從這個Groovy-ready 專案範本中啟動一個新專案。下載該骨架,將其解壓縮到您喜歡的目錄中,讓我們看看我們擁有的東西!這就像打開聖誕禮物嗎?
我已將範本專案解壓縮到一個名為 gaedemo 的目錄中。在這個目錄的根目錄下,您將看到一個 src 目錄,其中將包含我們所有需要編譯的 Groovy 和 Java 原始碼(servlet、網域類別、工具類別等)。deploy 目錄基本上對應於我們展開的網路應用程式:您將看到一個 classes 目錄用於編譯後的類別,lib 用於各種 JAR(Groovy JAR 以及 Google App Engine 自己的 API JAR),以及 groovy 用於包含我們將在本文第二部分中開發的 Groovlet。您也一定注意到了 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 Joint Compiler,能夠將 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!” 訊息!
簡而言之,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 的實例。它是一個小型實用程式 DSL,用於創建任何類型的 XML 或 HTML 標記。MarkupBuilder 沒有以字串形式輸出原始 HTML 與 println 語句,而是提供了更簡潔和更 Groovy 的語法。當然,您可以通過混合一些循環或條件語句等,使此標記盡可能動態。
重新上傳應用程式後,您現在可以通過訪問 URL http://myowngroovy.appspot.com/hello.groovy 來訪問這個 Groovlet。這次無需編譯任何東西,因為編譯這些 Groovlet 腳本是 GroovyServlet 的工作。
這不是很簡單嗎?
目前,完全支援 Groovlet 和普通 servlet,但是,例如,Grails 應用程式在當前版本的 Google App Engine 上無法運作。我們將繼續與 Google App Engine 團隊合作,以便您也可以使用 Grails 來開發更複雜的應用程式。
如果您想了解更多關於 Groovy 和 Grails 的資訊,以及如何編寫 Groovy 驅動的 App Engine 應用程式,您也可以考慮註冊並參加 GR8 Conference,這是一個專注於 Groovy、Grails 和 Griffon 的會議,由這些技術的專家或製造商擔任演講者,並提供動手實作的實務課程。隨著 Google App Engine 支援 Groovy 的公告,毫無疑問我們也將在會議上談論這一點!
我們期待閱讀您對 Groovy on App Engine 的回饋,並且我們很樂意聽到您可能提出的所有關於我們如何進一步改進在雲端開發 Groovy 應用程式體驗的建議。