实现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的。让那些无聊的配置文件走开!
分享到:
相关推荐
MVC和框架部分,包括Struts、Expresso、Webwork、Spring MVC、SOFIA、Weblogic PageFlow和Tapstry,这些都是常见的Java Web开发框架。 5. **RichClient**:探讨了SwingWeb、Echo、Flex、Laszlo System和SmartClient...
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip
动态星空背景个人主页(带后台).zip
scratch少儿编程逻辑思维游戏源码-迷雾森林:诞生 3.2 起源觉醒.zip
lib文件