springmvc+ftl时,修改jar中ftl文件,会造成访问时这个ftl文件节点文件的丢失,求帮助。
@空心大白菜 大神你好,今天又折腾了一天,还是不行:
想知道freemarker怎么去更新cache的,怎么禁用他的cache,或者怎么刷新他的cache应该就能解决我的问题,
把ftl放在jar里,是想做模块化。。团队A开发团队A的项目。
下面是我的springmvc 和 freemarker结合读取jar里面的ftl的代码,如果不去修改ftl,这个方法是没有问题的,什么都能访问到,如果一旦修改某个ftl文件,就会造成他这个节点下的所有ftl全部丢失,(我看部署的jar里面的ftl是有的) ,其他节点ftl访问正常。。
springmvc.xml
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
spring 不是有个视图解析器嘛,就是那个 org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver然后有个viewClass 指向的是 FreeMarkerView,所以我继承了他然后扩展了他
回复
你这个继承有问题啊,taglibFactory是你继承类的私有属性,不是父类里那个。你应该源码拿过来重写一个
回复
你的这段代码把父类方法给吃掉了,搞了个新的属性,结果又是private的,根本没地方用到
你扩展了FreeMarkerView,然后又重新定义了一个taglibFactory?这个私有的taglibFactory还没有任何引用,你做的初始化动作没有任何意义啊?spring并没有开放taglibFactory,你应该是重写FreeMarkerView这个类而不是继承了。
initServletContext是每次调用都会执行的,所以才有getConfiguration()!=null的判断,然而经过你override之后,再次调用啥都没做,还漏了一段代码,当然找不到资源了
第一个问题:肯定是更新了,因为我改这个ftl内容,页面也是实时的反映出来了; 第二个问题,要是更新了,那新jar也是生效的。 我反复的测试,还得出了,如果我修改ftl,这个ftl所在节点的文件,如果我访问过了,是不会被清的,还是可以访问,坑爹啊,这是为什么啊,,,求救啊,,,
回复
好矛盾的话...淡定.重新说下.
首先没明白里的问题: 1. freemaker 不更新 class path下的ftl 2.新的jar扔到 class path 不生效
如果是前者 可以看一下 Fremaker 是否可以自定义 Loader
顺便打自己的广告:我的 webit-script 的 Loader 是可以控制缓存 的 非常方便更新,但是 如果问题是第二点 缺省提供的ClasspathLoader也是“无能为力”, 不过 可以 自己定义 JarLoader 不用 ClasspathLoader 这样完全可以自己从Classpath扫描jar,控制 jar 的覆盖顺序,
嗯 现在他自己节点下的文件被清掉了,但是他自己却没有问题,和跟他不是同级的节点ftl也没问题,都可以正常访问,我在改这个ftl文件的时候,eclipse勾上了自动编译,实时的把我文件写入的jar包,我现在 只要知道了,如何让freemarker重新去加载那些cache树 就可以了,,目前开发自己功能起来,没有什么问题,但是就怕放任不管,以后会出更多的问题,我老大让我用osgi,那个更深,,,哎。。。。
要解决这个问题,要对tomcat等容器的加载有深刻理解,没有几天时间你怕是门都摸不到。
这个问题我很久之前遇到过,我曾想把一些业务相关的代码搞到jar包里,隐藏起来,后来发现不可行,当然原因很清楚,百分百是加载顺序和对象初始化的问题。但是我那时没能力解决这个问题,到现在也没深究,想起来要解决也不容易。