您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關基于Groovy 加速Google App Engine開發(fā)是怎么樣的,文章內(nèi)容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
輕量級是全新的趨勢
雖然 Google 的基礎設施大多是可以免費使用的(當存儲空間和帶寬達到 500MB,每月頁面訪問量達到大約 5 百萬次時便要收費),但它會在一定程度上犧牲一些靈活性。Google 的基礎設施支持 Java 技術,但這并不包括所有 的核心 Java 庫和相關開源庫。App Engine 是一個平臺 — 您需要基于它進行開發(fā)。但不足為奇的是,開源創(chuàng)新將幫助克服采用 Google App Engine 過程中的障礙。
Gaelyk 框架就是這種項目的一個典型,其目的是加速輕量級應用程序的開發(fā),即使用 Groovy 開發(fā)的、適當利用模型-視圖-控制器 (MVC) 模式的應用程序。在 Groovy 的魔力下,Gaelyk 將為 App Engine 的 API 注入一些易用性因素。此外,您還可以將 Gaelyk 與針對 Eclipse 的 Google App Engine 插件結合使用。快速開發(fā)和部署 Google App Engine 應用程序將變得非常簡單。
“通過 CouchDB 和 Groovy 的 RESTClient 實現(xiàn) REST” 利用一個停車罰單系統(tǒng)演示了面向文檔的數(shù)據(jù)庫的特性。在本文中,我將繼續(xù)創(chuàng)建一個支持創(chuàng)建、更新和刪除停車罰單的 Web 應用程序。Google 持久性架構不是面向文檔的,但其無模式特性實現(xiàn)了一個更加靈活的模型。因此,Web 將盡可能準確地建立一個停車罰單模型,這需要獲?。?/p>
警官姓名
日期
位置
違規(guī)情況
任何相關注釋
我保留位置為一個普通的文本框,因為一些人可以使用各種方式來表示違規(guī)發(fā)生的位置 — 比如在 Best Buy 的停車區(qū) 或者在 18 號街和 D 大街的拐角處。實際上,我不會嘗試描述一個特定格式,因為它不一定適合這個域。
首先,您需要安裝針對 Eclipse 的 Google App Engine 插件。您還需要從項目的網(wǎng)站下載 Gaelyk JAR 文件。記住這個下載的位置,因為您隨后需要將它移動到一個特定的目錄中。
Gaelyk 框架依賴于 Groovy,因此您還需要***的 Groovy 發(fā)行版:在撰寫本文時,它是一個簡單的 JAR 文件,即 groovy-all-1.6.5.jar。***,您需要通過 Google App Engine 管理面板創(chuàng)建一個應用程序 ID。(如果愿意,您可以重用在 “使用 Google App Engine” 中創(chuàng)建的應用程序 ID)。
接下來,在 Eclipse 中創(chuàng)建一個新的 Google Web Application Project,單擊 Next 按鈕并填入適當?shù)男畔ⅰ4_保取消選中了 Use Google Web Toolkit 選項,如圖 1 所示,因為您不需要它:
圖 1. 在 Eclipse 中創(chuàng)建一個 Google Apps Project
單擊 Finish 按鈕,您將建立好代碼基礎。
現(xiàn)在,將 Groovy 和 Gaelyk JAR 復制到新創(chuàng)建項目的 war/WEB-INF/lib 目錄中,如圖 2 所示:
圖 2. Gaelyk 的必需庫
要配置 Gaelyk,您需要為 Google App Engine 提供一些額外的信息,方法是編輯 WEB-INF/appengine-web.xml 文件。將您的應用程序 ID 添加到此文件頂部的應用程序部分,并添加一些 XML,如清單 1 所示:
清單 1. 對 App Engine 配置的必要更新
<static-files> <exclude path="/WEB-INF/**.groovy" /> <exclude path="**.gtpl" /> </static-files> |
添加這些內(nèi)容將防止 Google App Engine 靜態(tài)提供最終在使用 Gaelyk 時會創(chuàng)建的各種文件。如您所見,Gaelyk 將利用一個模板模型。因此,使用 .gtpl 擴展名的文件將類似于 JavaServer Pages (JSP) 并且將通過框架而非 App Engine 進行處理。
接下來,打開 web.xml 文件。該文件也可以在 WEB-INF 目錄中找到。它是標準的 Web 應用程序配置文件。(您將在初次訪問 App Engine 和 EC2 時操作此文件。)該文件需要將各種模式映射到特定的 servlet,因此根據(jù)清單 2 調(diào)整您的文件:
清單 2. 更新后的 web.xml 文件
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>GroovletServlet</servlet-name> <servlet-class>groovyx.gaelyk.GaelykServlet</servlet-class> </servlet> <servlet> <servlet-name>TemplateServlet</servlet-name> <servlet-class>groovyx.gaelyk.GaelykTemplateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GroovletServlet</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TemplateServlet</servlet-name> <url-pattern>*.gtpl</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.gtpl</welcome-file> </welcome-file-list> </web-app> |
注意,web.xml 文件指定 welcome 文件為 index.gtpl;因此,將 Eclipse 插件為您生成的 index.html 文件重命名為 index.gtpl。(如果使用 Windows® 操作系統(tǒng),則只需選擇文件并按下 F2。)
安置好適當?shù)膸觳⒄_配置了兩個 XML 文件之后,您可以驗證一切是否運行正常,這需要編輯 index.gtpl 文件讓它匹配清單 3 的內(nèi)容:
清單 3. 一個簡單的 GTPL 文件
<html> <head><title>A Simple GTPL</title></head> <body> <b><% print "Hello Gaelyk!".replace(" ", " from ") %></b> <p> <ol> <% def wrd = "Groovy" wrd.each{ letter -> %> <li><%= letter %></li> <% } %> </ol> </p> </body> </html> |
比較與分析Groovy與Java
Google App Engine性能優(yōu)化策略:頁面性
Google App Engine帶來的Java開發(fā)2.0實現(xiàn)
Google App Engine的Java持久性與數(shù)據(jù)存
JVM流行動態(tài)語言Groovy 1.7發(fā)布
可以看到,Gaelyk 中的 GTPL 文件(或 Gaelyk/Groovy 模板)類似于 JSP: 您可以在 scriptlet 中添加行為(在本例中,添加的行為是 Groovy)。注意,稍后您也可以使用閉包和引用變量。
保存您的 index.gtpl 文件在 Eclipse 中選擇項目的基本目錄,單擊鼠標右鍵,選擇 Run As 并選擇包含藍色 G 徽標的 Web Application 選項,如圖 3 所示:
圖 3. 作為 Google Web 應用程序運行
默認情況下,此啟動程序將在端口 8080 上啟動一個本地 Jetty 實例。如果要更改端口,請選擇 Run Configurations 選項并通過插件提供的選項面板配置端口。
運行 Gaelyk Web 應用程序的本地實例之后,打開一個 Web 瀏覽器并訪問 http://localhost:8080。index.gtpl 的輸出應如圖 4 所示:
圖 4. Hello world!
非常簡單,不是嗎?
簡單的持久性
罰單系統(tǒng)非常簡單。它提供了一個 Web 表單,可用于創(chuàng)建罰單以及在列表中查看、刪除和編輯罰單。我首先將通過 Gaelyk 模板創(chuàng)建一個簡單的 HTML 表單,并將它命名為 createticket.gtpl。如圖 5 所示,這個表單將嘗試捕獲與各停車罰單相關的數(shù)據(jù):
圖 5. 一個簡單的罰單表單
表單將提交給一個 groovlet;相應地,在項目的 WEB-INF 目錄中創(chuàng)建一個 groovy 文件夾。您的 groovlet 將存放在此處。(您在 “使用 Google App Engine” 中也完成了此操作。創(chuàng)建罰單(create-ticket)表單將提交給一個 createticket.groovy 文件。在新創(chuàng)建的 groovy 目錄中創(chuàng)建此文件。
毫無疑問,您可以在 Gaelyk 中使用 JDO 和 Java Persistence API (JPA) 代碼,但是也可以采用另外一種方法來與底層數(shù)據(jù)存儲交互:即使用 Google 的 Entity
對象。Gaelyk 團隊已憑借一些 Groovy 魔力簡化了持久對象的操作,從而增強了 Entity
對象。
在本例中,我希望獲取通過 createticket.gtpl 頁面提交的表單元素,并在系統(tǒng)中創(chuàng)建一個新罰單。通過使用 Entity
類,我不需要定義一個類似于 POJO 的對象來表示罰單(就像我在 “使用 Google App Engine” 中創(chuàng)建 Triathlon
JDO 對象時所做的一樣)。我可以采用 Groovy 的方式建立一個罰單模型,并毫不費力地保存它。
因此,我可以通過 Gaelyk 的 params
對象(Grails 也以某種形式提供了此對象)獲取由表單提交的參數(shù),并創(chuàng)建一個 Entity
實例,如清單 4 所示:
清單 4. 創(chuàng)建一個 Entity
def formatter = new SimpleDateFormat("MM/dd/yyyy") def offensedate = formatter.parse("${params.of_month}/${params.of_day}/${params.of_year}") def ticket = new Entity("ticket") ticket.officer = params.officer ticket.license = params.plate ticket.issuseDate = offensedate ticket.location = params.location ticket.notes = params.notes ticket.offense = params.offense |
注意,ticket
變量是 Entity
的一個實例。"ticket" String
表示的就是這種實體。它可以非常便捷地搜索罰單。接下來,我將自動為與罰單相關的 Entity
實例分配屬性值。現(xiàn)在,ticket.officer
表示通過 Web 頁面表單提交的 officer
參數(shù)的值。由于該表單包含三個日期字段,我也使用 SimpleDateFormat
創(chuàng)建一個日期實例,并將該值設置為 issueDate
。
至此,我已經(jīng)創(chuàng)建一個用于表示罰單的對象?,F(xiàn)在,我要做的就是使用以下代碼保存它:
ticket.save() |
現(xiàn)在,我已經(jīng)持久化了一個罰單,我將把用戶定向到一個可查看罰單的頁面。這也非常簡單。我只需要定向到 view-ticket Groovlet(以便處理):
redirect "viewticket.groovy?id=${ticket.key.id}" |
如您所見,我已經(jīng)創(chuàng)建了一個名稱為 id
的參數(shù),并將它設置為已保存罰單(由 Google App Engine 生成)實例的鍵。可見,create-ticket Groovlet 非常簡明和強大 — 這得益于 Gaelyk。
簡易視圖
在上一個示例中,當我創(chuàng)建了 ticket
實例之后,我繼續(xù)將請求重定向到另一個 Groovlet — 它可以簡化罰單的查看過程。在此 Groovlet 中,我編寫了一個 Google App Engine “read”。傳遞的 id
將用于查找新創(chuàng)建的實例。在本例中,我將使用 Google 的 KeyFactory
,它用于創(chuàng)建 Google 的 Key
對象的實例。然后,Key
將用于通過 datastoreService
查找相應的罰單實例,而 Gaelyk 已將它們添加到框架中的任何 Groovlet 實例中,如清單 5 所示:
清單 5. 查看 Entity
import com.google.appengine.api.datastore.KeyFactory if (params["id"]) { def id = Long.parseLong(params["id"]) try { def key = KeyFactory.createKey("ticket", id) def ticket = datastoreService.get(key) request.setAttribute "ticket", ticket forward "viewticket.gtpl" } catch (Throwable t) { //forward to some error page... } } else { forward "index.gtpl" } |
找到相應的 ticket
之后,罰單將被添加到 HTTP request
對象(它已經(jīng)出現(xiàn)在 Groovlet 中),然后將處理轉交給 viewticket.gtpl 頁面。與 Web 應用程序中的任何其他 JSP 一樣,這個 Web 頁面將顯示與傳入罰單相關的相應屬性。
從清單 6 中可以看出,Gaelyk 支持 includes。也就是說,在您的 .gtpl 文件中,您可以包括其他文件,就像普通 JSP 文件一樣。同樣,所有 .gtpl 文件都有一個 HTTP Request
對象的實例可用(通過 request
變量)。
清單 6. 查看 Entity
GTPL
<% include "/WEB-INF/includes/header.gtpl" %> <% def ticket = request.getAttribute("ticket") %> <div class="info"> <h3>Parking Ticket</h3> </div> <table> <tr> <th>Issuing Officer</th> <th>Vehicle Plate</th> <th>Date</th> <th>Offense</th> <th>Location</th> <th>Notes</th> </tr> <tr> <td>${ticket.officer} </td> <td>${ticket.license}</td> <td>${ticket.issuseDate}</td> <td>${ticket.offense}</td> <td>${ticket.location}</td> <td>${ticket.notes}</td> </tr> </table> <% include "/WEB-INF/includes/footer.gtpl" %> |
至此,您或許可以發(fā)現(xiàn) Gaelyk 使得在 Google App Engine 上創(chuàng)建輕量級 Web 應用程序輕而易舉。并且,操作 App Engine 的持久庫也變得再簡單不過。您在操作 Entity
時使用的低級 API 確實需要花一些時間習慣。查詢需要一些思考(在某些方面類似于使用 CouchDB 執(zhí)行查詢)。舉例來說,查看已創(chuàng)建罰單的列表需要一些如清單 7 所示的代碼:
清單 7. 查看一組 Entity
import com.google.appengine.api.datastore.Query import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit try { def query = new Query("ticket") query.addSort("issuseDate", Query.SortDirection.DESCENDING) def preparedQuery = datastoreService.prepare(query) def tickets = preparedQuery.asList( withLimit(10) ) request.setAttribute "tickets", tickets forward "index.gtpl" } catch (Throwable t) { forward "index.gtpl" } |
清單 7 使用了 App Engine 的 Query
對象。如您所見,您可以為查詢添加類似于排序的特性,甚至還能限制返回結果的方式。不需要使用 SQL,但需要確保數(shù)據(jù)已存儲并且可以檢索,只存在少許不同。
比較與分析Groovy與Java
Google App Engine性能優(yōu)化策略:頁面性
Google App Engine帶來的Java開發(fā)2.0實現(xiàn)
Google App Engine的Java持久性與數(shù)據(jù)存
JVM流行動態(tài)語言Groovy 1.7發(fā)布
如 “使用 Google App Engine” 所述,部署到云的過程也非常簡單。通過插件,只需要單擊 Deploy App Engine Project,其余的事情就由 Google 來完成了。事實上,您可以 下載 本文的代碼來完成此操作。代碼將填入一些間隔,因此我無法在一篇文章列出所有代碼。舉例來說,我實現(xiàn)了刪除罰單的功能,并且用戶與罰單之間的交互也稍有增強,因此您可以或多或少感受到 Gaelyk 的效果。
快速開發(fā)更加輕松
受到開源技術支持的云和無模式數(shù)據(jù)存儲無疑是未來 Java 開發(fā)中的一部分。兩者的采用門檻都較低;在本文的示例中,硬件和軟件都是免費的。并且,一旦 Google 開始收費,那么肯定要自力更生 — 每月 5 百萬的點擊率是巨大的流量。Gaelyk 框架加快了 Web 開發(fā)的步伐。Java 開發(fā)始終在日臻完善,不是嗎?
以上就是基于Groovy 加速Google App Engine開發(fā)是怎么樣的,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。