[转载]spring mvc & freemarker 版ROR
实现COC原则无配置自动映射
今天晚上试验了一下想象中的配置成功了。
SPRINGMVC+FREEMARKER实现类似ROR的URL自动路由COTROLLER处理结果根据URL自动映射到URL对应的FTL模板文件。
下面我把配置文件贴出来看看。
修改了jpetstore的部分文件。包括web.xml将.html的请求映射到springmvc上。
修改 petstore-servlet.xml 当然还要改一改你的build.xml才能将新的ftl一起部署过去。<beans>
<!--=========================VIEWDEFINITIONS=========================-->
<beanid="viewNameTranslator"
class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>
<!---->
<!--freemarkerconfig-->
<beanid="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath"value="/WEB-INF/ftl/"/>
</bean>
<beanid="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<propertyname="cache"value="true"/>
<propertyname="prefix"value=""/>
<!--prefix这个属性要注意,一开始我写成了/WEB-INF/ftl/找了半天告诉我找不到模板,原来是这里写错了。。-->
<propertyname="suffix"value=".ftl"/>
<!--如果你需要使用Spring对FreeMarker宏命令的支持,将这个属性设为true-->
<propertyname="exposeSpringMacroHelpers"value="true"/>
</bean>
<!--=========================DEFINITIONSOFPUBLICCONTROLLERS=========================-->
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<beanid="index"
class="org.springframework.samples.jpetstore.web.spring.IndexController">
</bean>
</beans>
这个配置就可以实现我刚才说的映射渲染模板的方式了。效果还不错。
这个CONTROLLER继承MultiActionController这样就可以实现
http://localhost:8080/jpetstore/index/index.html-->IndexController.index方法上。
http://localhost:8080/jpetstore/index/list.html-->IndexController.list方法上。
MultiActionController的子类写法有些特殊要求,需要小心。参考API可以看到它的方法签名需要是
我一开始把它的签名写成protected就出错了。后台提示无法找到handler。具体用法请参考API
同时ftl模板的位置相应的是/WEB-INF/ftl/index/index.html以及/WEB-INF/ftl/index/list.html
是不是舒服多了?其实用SPRINGMVC也能体验ROR一样的COC的。让那些无聊的配置文件走开!