什么是Groovy:Hello World
什么是Groovy?
Groovy是一種語言,其語法類似于Java,但比Java更簡單。它通常被視為腳本/靈活/動態(tài)的語言,但是我不喜歡這類形容詞,因為我認(rèn)為它們只會令人困惑。如果說Java是一位明智的中年男子,那么Groovy就是他十幾歲的兒子。Groovy具有父親的許多特點,但是更為狂野且更為有趣。他們也可以很好地合作。
Groovy的規(guī)則比Java少得多。例如,要在Java中獲得標(biāo)準(zhǔn)的"Hello World"輸出,您需要編寫一個類、一個具有合適參數(shù)的主方法,等等。但是在Groovy中,如果不想編寫所有樣板代碼,您可以拋開類定義和主方法,僅編寫一行代碼即可打印出"Hello World"。
以下是打印Hello World的文件 Hello.groovy 的內(nèi)容:
- println "Hello World"
Java平臺僅關(guān)心使字節(jié)碼得到執(zhí)行。同樣,此平臺不強(qiáng)迫您使用Java語言。只要提供了字節(jié)碼,工作就會進(jìn)行。Groovy代碼會被編譯為字節(jié)碼,而對于Java平臺來說,字節(jié)碼是從Java代碼還是Groovy代碼生成的并沒有任何區(qū)別。
什么是Groovy:對清單、映射和范圍的內(nèi)置支持
以下是一個Groovy例子,它顯示了Groovy對清單、映射和范圍的內(nèi)置支持,并證明了Groovy的簡單性及其利用Java的強(qiáng)大功能的能力:
- // Print Date
- def mydate = new java.util.Date()
- println mydate
- //Iterate through a map
- def numbersMAP = ['1':'ONE', '2':'TWO']
- for (entry in numbersMAP) {
- println "${entry.key} = ${entry.value}"
- }
- //Introducing the range
- def range = 'a'..'d'
- //Lists
- def numberlist = [1, 2, 3, 4, 5, 6, 7, 8]
- println numberlist;
- println "Maximum value: ${numberlist.max()}"
請注意以上代碼直接使用java.util.Date ,對收集的內(nèi)置支持減少了使用清單、映射和范圍所需的代碼。還有許多其他有趣的Groovy特性,例如閉包和簡化的XML處理。您可以在groovy.codehaus.org上找到詳細(xì)清單。
現(xiàn)在讓我們來討論如何將Groovy用于Web開發(fā)。
什么是Groovy:使用Groovy進(jìn)行Web開發(fā)
大多數(shù)Java EE教程都從一個基本servlet例子開始。對于Groovy Web開發(fā)來說,您將從groovlet(在groovy中servlet的對應(yīng)概念)開始。如果您在servlet中擺脫了類和doXX() 方法聲明,那么剩下的內(nèi)容就與groovlet很像了。以下是一個名為 Login.groovy 的groovlet例子,您需要將它置于Web應(yīng)用程序的最高級目錄:
- def username= request.getParameter("username")
- def password= request.getParameter("password")
- if (username == "java" && password == "developer") {
- response.sendRedirect("home.jsp")
- session = request.getSession(true);
- session.setAttribute("name", username)
- }
- else {
- println """
- < h1>Login Invalid< /h1>
- < p>Your IP has been logged > ${request.remoteHost}< /p>
- """
- paramMap = request.getParameterMap()
- println "< p>You Submitted:< /p>"
- for (entry in paramMap) {
- println "${entry.key} = ${entry.value}< br/>"
- }
- }
您可以僅創(chuàng)建一個簡單的HTML表單,然后將此表單的行為屬性發(fā)送到 action="Login.groovy"。然后將以下標(biāo)簽添加到web.xml:
- < servlet>
- < servlet-name>Groovy< /servlet-name>
- < servlet-class>groovy.servlet.GroovyServlet< /servlet-class>
- < /servlet>
- < servlet-mapping>
- < servlet-name>Groovy< /servlet-name>
- < url-pattern>*.groovy< /url-pattern>
- < /servlet-mapping>
現(xiàn)在只需將要求的Groovy jar 文件添加到WEB-INF/lib 目錄,您的Groovy Web應(yīng)用程序就準(zhǔn)備好在任意Java EE應(yīng)用服務(wù)器上運行了。
您應(yīng)該已經(jīng)注意到代碼中沒有分號,而且使用了隱式變量如request和response。其他隱式變量有context、application、session、out、sout和 html。
GSP是JSP在groovy中的對應(yīng)概念。您無需使用println生成HTML;只需將Groovy代碼嵌入HTML頁面。本文中的例子將在提到Grails時使用GSP。
請注意,因為所有代碼最終都要轉(zhuǎn)換為字節(jié)碼,所以groovlet和GSP能夠與servlet和JSP輕松協(xié)作。因此您無需區(qū)分groovlet和GSP或者servlet和JSP。
【編輯推薦】