Servlet 支援

您可以在 Groovy 中撰寫 (Java) Servlet (稱為 Groovlet)。

還有一個 GroovyServlet

此功能會自動編譯您的 .groovy 原始檔,將它們轉換成位元組碼,載入類別並快取,直到您變更原始檔。

以下是一個簡單的範例,向您展示您可以從 Groovlet 執行哪些類型的動作。

請注意使用隱含變數來存取階段、輸出和要求。另外請注意,這比較像腳本,因為它沒有類別包裝器。

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

或者,使用 MarkupBuilder 執行相同動作

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

1. 隱含變數

下列變數已準備好可以在 Groovlet 中使用

變數名稱 繫結到 備註

request

ServletRequest

-

response

ServletResponse

-

context

ServletContext

-

application

ServletContext

-

session

getSession(false)

可能為空值!請參閱 <1>

params

Map 物件

headers

Map 物件

out

response.getWriter()

請參閱 <2>

sout

response.getOutputStream()

請參閱 <2>

html

new MarkupBuilder(out)

請參閱 <2>

json

new StreamingJsonBuilder(out)

請參閱 <2>

  1. 只有在已經有 session 物件的情況下,才會設定 session 變數。請參閱上述範例中的 if (session == null) 檢查。

  2. 這些變數無法在 Groovlet 內部重新指派。它們在第一次存取時繫結,允許在使用 out 之前呼叫 response 物件上的方法。

2. 設定 groovlets

將下列內容新增到您的 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>

然後將所需的 groovy jar 檔案放入 WEB-INF/lib

現在將 .groovy 檔案放入根目錄(例如,您放置 html 檔案的位置)。GroovyServlet 會負責編譯 .groovy 檔案。

因此,例如使用 tomcat,您可以像這樣編輯 tomcat/conf/server.xml

<Context path="/groovy" docBase="c:/groovy-servlet"/>