您可以在 Groovy 中编写(Java)Servlet(称为Groovlets)。还有一个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) | 可以是 null(参考<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
中重新分配这些变量。它们在第一次访问时受到约束,允许例如在使用之前调用response
对象上的out
方法。
2.设置 groovylets
在你的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"/>
然后使用 http://localhost:8080/groovy/hello.groovy
访问它。
网友评论