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