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> |
-
只有在已經有 session 物件的情況下,才會設定 session 變數。請參閱上述範例中的
if (session == null)
檢查。 -
這些變數無法在
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"/>