?
? ????? PHP ??? ???? ??? ?? ??
這個(gè)小應(yīng)用案例使用Spring 2.0引入的動(dòng)態(tài)語言支持來實(shí)現(xiàn)Spring MVC控制器。
這個(gè)Web應(yīng)用程序很簡(jiǎn)單,因?yàn)槠淠康闹皇前鸦镜膭?dòng)態(tài)語言支持運(yùn)用于Spring MVC中,沒別的東西了。
應(yīng)用程序中有一個(gè)Groovy文件。名字是'FortuneController.groovy',放在'war/WEB-INF/groovy'文件夾中。 'war/WEB-INF/fortune-servlet.xml'這個(gè)Spring MVC配置文件的 'fortune' bean會(huì)引用該Groovy腳本文件。
通過<lang:groovy/>元素的'refresh-check-delay'屬性,'fortune' bean被設(shè)置為refreshable bean。(校對(duì)時(shí)注意去掉本括號(hào),動(dòng)態(tài)語言章節(jié)中refreshable未翻譯,故此處對(duì)該句做了相應(yīng)調(diào)整。) 該屬性設(shè)置為'3000'也就是說對(duì)'FortuneController.groovy'會(huì)在3秒鐘延時(shí)后生效。
如果是把應(yīng)用程序部署到Tomcat(打個(gè)比方),那你可以進(jìn)入'/WEB-INF/groovy'文件夾,直接編輯'FortuneController.groovy'文件。 任何改變都會(huì)自動(dòng)生效,'fortune' bean將被重新配置……完全無需停止、重新部署并重啟應(yīng)用程序。親自嘗試一下吧…… 毫無疑問'FortuneController.groovy'文件里并沒有什么很復(fù)雜的邏輯(這是件好事,因?yàn)镾pring MVC中的控制器本來就該盡可能地簡(jiǎn)單一些)。
你可以試著返回一個(gè)默認(rèn)的Fortune而不是將它代理給注入的FortuneService,或者也可以返回一個(gè)不同的邏輯視圖名, 如果想更進(jìn)一步的話,還可以自己創(chuàng)建一個(gè)實(shí)現(xiàn)了FortuneService接口的Groovy實(shí)現(xiàn),并將它插入Web應(yīng)用程序中。 也許你自定義的Groovy FortuneService可以訪問Web服務(wù)來獲得某些Fortune,亦或者應(yīng)用一些不同的隨機(jī)邏輯來返回Fortune,隨便怎么樣都行。 關(guān)鍵是在做這些變更時(shí)無需重新部署應(yīng)用程序。這在做快速原型開發(fā)時(shí)簡(jiǎn)直太棒了。
samples/showcases/dynamvc目錄包含了web-app的源代碼。部署時(shí)需要用Apache Ant進(jìn)行構(gòu)建。 唯一的要求是JDK >=1.4(Groovy要求JDK至少要是1.4的)Ant >=1.5。
在該目錄中運(yùn)行“build.bat”,帶上某個(gè)目標(biāo)(例如"build.bat build","build.bat warfile")。 請(qǐng)注意,用這種方式啟動(dòng)Ant你需要在classpath中存在一個(gè)XML解析器(例如放在"%JAVA_HOME%/jre/lib/ext"中;包含在JDK 1.4中)。 可以用“warfile.bat”來生成WAR文件。WAR文件會(huì)被建在"dist"目錄中。