Java Groovlets和普通的Web项目集成
由于Groovy动态语言的方便性,如果想在普通的web项目中集成有两个选择
使用基于groovy的Grails框架,非常的方便,适用于新建的项目
使用groovy本身集成,适用已有项目的维护(毕竟按照grails的约定升级一个项目对于大的项目还是有很多的工作量的)
下文把实际涉及的一个项目维护使用groovy的过程总结一下:
Web.xml配置:加入groovy响应的servlet
<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-all-1.7.10.jar groovy的所有依赖项
mysql-connector-java-5.0.7-bin.jar:mysql的驱动,数据库项目使用
例子
以下是使用sql和数据绑定等的简单实例
importgroovy.sql.Sql
if(!session)
{
session = request.getSession(true)
}
if(!session.Counter)
{
session.Counter =1
}
/*DROP TABLE IF EXISTS `demo`.`text_search`;
CREATE TABLE `demo`.`text_search` (
`id` bigint(20) NOT NULL auto_increment,
`version` bigint(20) NOT NULL,
`description` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
*/
defdb = groovy.sql.Sql.newInstance('jdbc:mysql://localhost:3306/demo','root', '', 'com.mysql.jdbc.Driver')
def name = params.guess
defdesc = "descdd"
try
{
db.execute("insert into text_search (version,username, description) values(1, ${name} , ${desc})")
}catch(exception)
{
println '已经存在'
}
html.html{
head{
title("Groovy Demo")
}
body{
p("${request.remoteHost}::: ${session.Counter}")
h1 'Variables in the Binding:'
table(summary:'binding') {
tbody {
binding.variables.each{ key, value ->
tr {
tdkey.toString()
td(value ? value.toString() : 'null')
}
}
}
}
hr()
db.eachRow("select * from text_search"){
println it.id
printlnit.username
hr()
}
}
}
session.Counter= session.Counter + 1
使用http://localhost:8084/demo/hello.groovy?guess=demo访问即可写入数据,读取内容
相关的信息参考
名称 |
备注(Servlet中的对应) |
实例用法 |
headers |
Map类型 HTTP request headers |
headers.host |
params |
Map类型 HTTP request parameters |
params.myParam
|
session |
ServletSession, can be null |
session?.myParam |
request |
HttpServletRequest |
request.remoteHost |
response |
HttpServletResponse |
response.contentType=’text/xml’ |
context |
ServletContext |
context.myParam |
application |
ServletContext (同 context) |
application.myParam |
out |
response.writer |
延迟初始化,第一次使用时初始化 |
sout |
response.outputStream |
延迟初始化,第一次使用时初始化 |
html |
Builderinitialized as new MarkupBuilder(out) |
延迟初始化,第一次使用时初始化 |
TemplatingGroovlets
如果想处理更服务的页面,可以使用模板,具体参考文档
总结
对于java不是很熟的人员(如.net人员)维护已有的java web项目,使用groovy可以比较快速的跟进,同时由于groovy语法的简便性和集成性,对于普通的xml文件处理、数据处理等可以使用较少的简洁的代码实现
Groovy的sample比较系统统一,查找方便
和已有的java代码可以互相调用