你能够使用Groovy( 例如:Groovlets) 写一个正常的Java servlets。
这里还有一个 GroovyServlet 。
此功能会自动编译你的.groovy 源文件,把它们变成字节码,加载类并且缓存它,直到你改变源文件。
下面是一个简单的例子来说明你通过 Groovlet 可以做的事情 。
请注意隐含变量访问 session,output 和 request 的用法。 还要注意,这更像是一个脚本 ,因为它没有一个类的包装。
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 做同样的事情:
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
隐含变量
下面的变量是已经准备好在groovlets 中使用的:
变量名 | 绑定到 | 注 |
request | ServletRequest |
|
response | ServletResponse |
|
context | ServletContext | unlike Struts |
application | ServletContext | unlike Struts |
session | getSession(false) | can be null! see |
params |
| a Map object |
headers |
| a Map object |
out | response.getWriter() | see |
sout | response.getOutputStream() | see |
html | new MarkupBuilder(out) | see |
A 如果已经有一个 session 对象, session 变量只能设置。 参见上面的例子 中“ if(session== NULL)” 的检查。
B 这些变量不能在 Groovlet 内重新分配。 他们在第一次访问时绑定, allowing to e.g. calling methods on the 'response' object before using 'out'.
设置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.jar、antlr.jar 和 asm.jar。 或复制 groovy-all-xyz.jar 到 WEB-INF/lib 目录中。
现在把.groovy 文件放在根目录(即你存放HTML 文件的地方)。 Groovy servlet 需要编译.groovy 文件。
因此,对于使用Tomcat 的 例子 ,你可以像这样修改tomcat/conf/server.xml :
<Context path="/groovy" docBase="c:/groovy-servlet "/> 然后访问它http://localhost:8080/groovy/hello.groovy