[转载]spring mvc & freemarker 版ROR

实现COC原则无配置自动映射

引用
http://localhost:8080/jpetstore/index/index.html --> IndexController.index() --> /WEB-INF/ftl/index/index.flt

今天晚上试验了一下想象中的配置成功了。

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>

这个配置就可以实现我刚才说的映射渲染模板的方式了。效果还不错。

引用
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

是不是舒服多了?其实用SPRINGMVC也能体验ROR一样的COC的。让那些无聊的配置文件走开!

相关推荐