26.2. 使用动态语言实现的Spring MVC控制器

这个小应用案例使用Spring 2.0引入的动态语言支持来实现Spring MVC控制器。

这个Web应用程序简单,因为其目的只是把基本的动态语言支持运用于Spring MVC中,没别的东西了。

应用程序中有一个Groovy文件。名字是'FortuneController.groovy',放在'war/WEB-INF/groovy'文件夹中。 'war/WEB-INF/fortune-servlet.xml'这个Spring MVC配置文件的 'fortune' bean会引用该Groovy脚本文件。

通过<lang:groovy/>元素的'refresh-check-delay'属性,'fortune' bean被设置为refreshable bean。(校对时注意去掉本括号,动态语言章节中refreshable未翻译,故此处对该句做了相应调整。) 该属性设置为'3000'也就是说对'FortuneController.groovy'会在3秒钟延时后生效。

如果是把应用程序部署到Tomcat(打个比方),那你可以进入'/WEB-INF/groovy'文件夹,直接编辑'FortuneController.groovy'文件。 任何改变都会自动生效,'fortune' bean将被重新配置……完全无需停止、重新部署并重启应用程序。亲自尝试一下吧…… 毫无疑问'FortuneController.groovy'文件里并没有什么很复杂的逻辑(这是件好事,因为Spring MVC中的控制器本来就该尽可能地简单一些)。

你可以试着返回一个默认的Fortune而不是将它代理给注入的FortuneService,或者也可以返回一个不同的逻辑视图名, 如果想更进一步的话,还可以自己创建一个实现了FortuneService接口的Groovy实现,并将它插入Web应用程序中。 也许你自定义的Groovy FortuneService可以访问Web服务来获得某些Fortune,亦或者应用一些不同的随机逻辑来返回Fortune,随便怎么样都行。 关键是在做这些变更时无需重新部署应用程序。这在做快速原型开发时简直太棒了。

26.2.1. 构建与部署

samples/showcases/dynamvc目录包含了web-app的源代码。部署时需要用Apache Ant进行构建。 唯一的要求是JDK >=1.4(Groovy要求JDK至少要是1.4的)Ant >=1.5。

在该目录中运行“build.bat”,带上某个目标(例如"build.bat build","build.bat warfile")。 请注意,用这种方式启动Ant你需要在classpath中存在一个XML解析器(例如放在"%JAVA_HOME%/jre/lib/ext"中;包含在JDK 1.4中)。 可以用“warfile.bat”来生成WAR文件。WAR文件会被建在"dist"目录中。