可以在 Groovy 中写普通的 Java Servlets(也就是 Groovlets)。
有一个 GroovyServlet。
这一特性会自动编译 .groovy 源文件成字节码,这个类会装载并缓存在虚拟机中,直到源文件改变。
下面是一个 Groovlet 的示例。
注意 session、output、request 这些内置变量的使用,另外因为没有 class 包裹着,它更像是一个脚本。
| Code Block | ||
|---|---|---|
| ||
if (!session) {
session = request.getSession(true);
}
if (!session.counter) {
session.counter = 1
}
println """
<html>
<head>
<title>Groovy Servlet</title>
</head>
<body>
Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}
</body>
</html>
"""
session.counter = session.counter + 1
|
或者使用 MarkupBuilder 完成相同的功能:
| Code Block | ||
|---|---|---|
| ||
if (!session) {
session = request.getSession(true)
}
if (!session.counter) {
session.counter = 1
}
html.html { // html 隐式地绑定在 new MarkupBuilder(out)。
head {
title("Groovy Servlet")
}
body {
p("Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}")
}
}
session.counter = session.counter + 1
|
内置变量
以下变量可以直接在 Groovlets 中使用:
变量名 | 绑定对象 | 说明 |
|---|---|---|
request | ServletRequest | - |
response | ServletResponse | - |
context | ServletContext | 和 Struts 不同 |
application | ServletContext | 和 Struts 不同 |
session | getSession(false) | 可为空(null)! 参见 |
params |
| Map 对象 |
headers |
| Map 对象 |
out | response.getWriter() | 参见 |
sout | response.getOutputStream() | 参见 |
html | new MarkupBuilder(out) | 参见 |
A:如果 session 对象存在,就设置到变量中,如果不存在不会新建一个 session,所以它可能为空。(The session variable is only set, if there was already a session object.)可以像上面代码中那样通过 'if (session == null)' 检查是否为空。
B:这个变量在 Groovlet 中不能被赋值。它们在第一次被访问时被绑定,例如允许在使用 'out' 之前调用 'response' 的方法。(They are bound on first access, allowing to e.g. calling methods on the 'response' object before using 'out'.)
配置 groovylets
将以下内容添加到 web.xml:
| Code Block | ||
|---|---|---|
| ||
<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.jar、antlr.jar 和 asm.jar,或者将 groovy-all-xyz.jar 复制到 WEB-INF/lib - 这基本上包含了 antlr 和 asm jar 包。
现在将 .groovy 文件放到所谓的根目录(也就是你放置 html 文件的地方)。groovy servlet 会编译 .groovy 文件的。
如果你使用 tomcat,可以这样修改 tomcat/conf/server.xml 文件:
| Code Block | ||
|---|---|---|
| ||
<Context path="/groovy" docBase="c:/groovy-servlet"/> |