为什么java开发没有php容易?,我在那篇文章了提出了三点原因,利用groovy,我们能在一定程度上做到那三点,从而加快了java web的开发。jsp本身以具有不需要重启就可以生效的能力,但是没有好用的map和动态类型的能力,用在前文 用groovyServlet和TemplateServlet快速开发网页中的方法,可以通过groovy让页面具有好用的map和动态类型的能力,但是 TemplateServlet的局限性 还是很难让我们单凭在页面里编程来构建规模稍大些的应用。引入spring,利用spring对动态语言的支持,我们可以将可重用的逻辑封装到由groovy编写的spring的bean里,这样,就可以最终实现从页面到后台全groovy的效果了,让java的web开发可以达到近似于php的易用度。
看看详细的做法。
把最新版的groovy-all.jar和spring.jar以及spring所依赖的相关包放到/WEB-INF/lib/目录下。
首先,在web.xml里配置好对groovyServlet, TemplateServlet和spring的支持
代码如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>groovlet</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet> <servlet-name>gsp</servlet-name> <servlet-class>groovy.servlet.TemplateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>groovlet</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>gsp</servlet-name> <url-pattern>*.gsp</url-pattern> </servlet-mapping>
然后,配置用groovy写spring的bean
如果你要写一个id为foo的bean, 那么要先用java写一个接口,然后用groovy写Bean实现接口,这样不但可以让你以后可以更容易用java重写groovy的bean,也可以避免和spring aop的冲突。
interface Foo.java 代码:
public interface Foo { public String shout(String name); }
groovy实现类 FooImpl.groovy代码:
public class FooImpl implements Foo { def sampleProp public String shout(String name) { def c = {"Groovy : ${sampleProp} ${it}"} return c(name) } }
然后在applicationContext中配置
<lang:groovy id="foo" refresh-check-delay="5000" script-source="classpath:FooImpl.groovy"> <lang:property name="sampleProp" value="Hello" /> </lang:groovy>
注意上面的refresh-check-delay=”5000″是让spring每过五秒钟就刷新一下groovy代码,重新编译,当最终部署的时候,可以把它去掉,这样就不会重复刷新了。但是在开发时,我们因此获得了不重启就生效能里。
最后,可以在页面groovy文件中使用这个bean了
使用这个bean和使用其他的spring bean没有什么区别。
import org.springframework.web.context.support.WebApplicationContextUtils; def spring = WebApplicationContextUtils.getWebApplicationContext(context) Foo foo = spring.getBean("foo") foo.shout("sulong")
只要不修改applicationConfig.xml,修改其他的部分都不需要重启或重新部署,这样,你可以通过groovy和spring来达到类似于php那种快速开发的目的。并且在后期,如果有必要,你还可以通过用java重写的bean的方式,来做性能优化。