spring mvc & freemarker 版ROR

转载 : 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的。让那些无聊的配置文件走开!

你可能感兴趣的:(spring,bean,mvc,Web,freemarker)