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> |
-
只有当已经存在会话对象时,才会设置会话变量。请参阅上面示例中的
if (session == null)
检查。 -
这些变量不能在
Groovlet
内部重新赋值。它们在首次访问时绑定,例如允许在使用out
之前调用response
对象上的方法。
2. 设置 Groovlet
将以下内容添加到你的 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"/>
然后通过 https://:8080/groovy/hello.groovy 访问它