用Groovy寫(xiě)Servlet

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

快速開(kāi)始

Groovy語(yǔ)言提供了一個(gè)模塊,可以讓我們寫(xiě)用Groovy腳本的方式來(lái)編寫(xiě)Servlet创泄,這叫做Groovlets知染。先看看一個(gè)簡(jiǎn)單的例子吧肋僧。下面這幾個(gè)例子都來(lái)自官方文檔。

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的標(biāo)記模板引擎。不太了解的可以看看我的文章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

當(dāng)然了,還需要配置Servlet來(lái)處理這些Groovlets辫诅。這些Groovlets要放在原來(lái)JSP放的位置凭戴,也就是項(xiàng)目的WEB根目錄下。如果放到源代碼目錄下就錯(cuò)了炕矮。

<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中預(yù)定義了幾個(gè)變量么夫,讓我們能方便的使用。

  • request
  • response
  • context
  • application肤视,以上幾個(gè)和JSP中的一樣档痪,直接用就行了
  • session,該對(duì)象可能為空钢颂,只有當(dāng)你向session放東西之后它才不為空钞它,不然就要像官方的例子那樣先判斷是不是空,然后手動(dòng)創(chuàng)建一個(gè)session
  • params
  • headers殊鞭,和上面的params一樣遭垛,都是Map類型
  • out,相當(dāng)于response.getWriter()
  • sout 操灿,相當(dāng)于response.getOutputStream()
  • html锯仪,Groovy的標(biāo)記模板,相當(dāng)于new MarkupBuilder(out)
  • json趾盐,輸出json的庶喜,相當(dāng)于new StreamingJsonBuilder(out)

我的小例子

本來(lái)最后想用Groovlets寫(xiě)點(diǎn)東西,結(jié)果發(fā)現(xiàn)它的語(yǔ)法雖然挺好用救鲤,但是視圖部分有點(diǎn)坑久窟。我用標(biāo)記模板想迭代一個(gè)表格,結(jié)果顯示無(wú)法在空對(duì)象上使用屬性本缠,查了半天沒(méi)找到解決辦法斥扛。所以只好寫(xiě)這么一個(gè)小例子,例子很簡(jiǎn)單丹锹,輸入一個(gè)名稱給服務(wù)器稀颁,然后返回問(wèn)候。

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


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

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

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末楣黍,一起剝皮案震驚了整個(gè)濱河市匾灶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌租漂,老刑警劉巖阶女,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊糜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡张肾,警方通過(guò)查閱死者的電腦和手機(jī)芭析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吞瞪,“玉大人馁启,你說(shuō)我怎么就攤上這事∩指眩” “怎么了惯疙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妖啥。 經(jīng)常有香客問(wèn)我霉颠,道長(zhǎng),這世上最難降的妖魔是什么荆虱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任蒿偎,我火速辦了婚禮,結(jié)果婚禮上怀读,老公的妹妹穿的比我還像新娘诉位。我一直安慰自己,他們只是感情好菜枷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布苍糠。 她就那樣靜靜地躺著,像睡著了一般啤誊。 火紅的嫁衣襯著肌膚如雪岳瞭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天蚊锹,我揣著相機(jī)與錄音瞳筏,去河邊找鬼。 笑死牡昆,一個(gè)胖子當(dāng)著我的面吹牛姚炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迁杨,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钻心,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凄硼!你這毒婦竟也來(lái)了铅协?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤摊沉,失蹤者是張志新(化名)和其女友劉穎狐史,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骏全,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年苍柏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姜贡。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡试吁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楼咳,到底是詐尸還是另有隱情熄捍,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布母怜,位于F島的核電站余耽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苹熏。R本人自食惡果不足惜碟贾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望轨域。 院中可真熱鬧袱耽,春花似錦、人聲如沸疙挺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铐然。三九已至蔬崩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀暑,已是汗流浹背沥阳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留自点,地道東北人桐罕。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桂敛,于是被迫代替她去往敵國(guó)和親功炮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理术唬,服務(wù)發(fā)現(xiàn)薪伏,斷路器,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法粗仓,類相關(guān)的語(yǔ)法嫁怀,內(nèi)部類的語(yǔ)法设捐,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法塘淑,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,668評(píng)論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,867評(píng)論 6 342
  • 從三月份找實(shí)習(xí)到現(xiàn)在萝招,面了一些公司,掛了不少存捺,但最終還是拿到小米槐沼、百度、阿里捌治、京東母赵、新浪、CVTE具滴、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,281評(píng)論 11 349
  • 要問(wèn)時(shí)下最火的手游是什么构韵,街頭采訪周蹭,那一定是非《王者榮耀》莫屬了。拿出手機(jī)就開(kāi)戰(zhàn)疲恢,體檢戰(zhàn)斗的快感凶朗,等公交、地鐵的空...
    此木無(wú)為閱讀 373評(píng)論 0 0