用Groovy寫Servlet

本文參考自Servlet support,大部分代碼引用了原文檔。

快速開始

Groovy語言提供了一個模塊,可以讓我們寫用Groovy腳本的方式來編寫Servlet,這叫做Groovlets。先看看一個簡單的例子吧。下面這幾個例子都來自官方文檔。

if (!session) {
  session = request.getSession(true)
}

if (!session.counter) {
  session.counter = 1
}

println """
<html>
    <head>
        <title>Groovy Servlet</title>
    </head>
    <body>
        <p>
Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}
        </p>
    </body>
</html>
"""
session.counter = session.counter + 1

也可以使用Groovy的標記模板引擎。不太了解的可以看看我的文章Groovy模板引擎,或者直接看原文檔。

if (!session) {
    session = request.getSession(true)
}

if (!session.counter) {
    session.counter = 1
}

html.html { // html is implicitly bound to new MarkupBuilder(out)
  head {
      title('Groovy Servlet')
  }
  body {
    p("Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}")
  }
}
session.counter = session.counter + 1

當然了,還需要配置Servlet來處理這些Groovlets。這些Groovlets要放在原來JSP放的位置,也就是項目的WEB根目錄下。如果放到源代碼目錄下就錯了。

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

在Groovlets中預定義了幾個變量,讓我們能方便的使用。

  • request
  • response
  • context
  • application,以上幾個和JSP中的一樣,直接用就行了
  • session,該對象可能為空,只有當你向session放東西之后它才不為空,不然就要像官方的例子那樣先判斷是不是空,然后手動創建一個session
  • params
  • headers,和上面的params一樣,都是Map類型
  • out,相當于response.getWriter()
  • sout ,相當于response.getOutputStream()
  • html,Groovy的標記模板,相當于new MarkupBuilder(out)
  • json,輸出json的,相當于new StreamingJsonBuilder(out)

我的小例子

本來最后想用Groovlets寫點東西,結果發現它的語法雖然挺好用,但是視圖部分有點坑。我用標記模板想迭代一個表格,結果顯示無法在空對象上使用屬性,查了半天沒找到解決辦法。所以只好寫這么一個小例子,例子很簡單,輸入一個名稱給服務器,然后返回問候。

def name = params['name'] ?: '易天'


html.html {
    head {
        title('主頁')
        link(rel: 'stylesheet', src: 'site.css')
    }
    body {
        h1 "${name} 你好"

        form(method: 'get', action: 'index.groovy') {
            label(for: 'name', value: '請輸入名稱')
            input(id: 'name', type: 'text', name: 'name')
            input(type: 'submit', value: '提交')
        }

    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,954評論 6 342
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,366評論 11 349
  • 要問時下最火的手游是什么,街頭采訪,那一定是非《王者榮耀》莫屬了。拿出手機就開戰,體檢戰斗的快感,等公交、地鐵的空...
    此木無為閱讀 378評論 0 0