spring mvc+velocity 打成war(war不解压)发布 springmvcvelocitywarWebappResourceLoader
最近在学习velocity。搞了个简单的mvc,然后打成war包发布,然后我的tomcat是不解压war包的,也就是说在webapps文件夹里面,war包不解压成文件夹格式。
然后运行我的webapp的时候,报错了,报找不到我的velocity资源文件,找了下网上的资料,发现我的velocity的ResourceLoader配置的是FileResourceLoader,这种resourceLoader是读文件目录的,也就是说,不解压war的话,那就是读取不到资源,如果tomcat设置了不解压war,那就会报错,如果是解压的war包,那就没问题。
如果是直接以不解压的war包进行发布的话,需要用另外一个resourceLoader, 也就是org.apache.velocity.tools.view.WebappResourceLoader
但这个resourceLoader需要配置servletContext,刚开始我运行的项目的时候,总是报没有设置servletContex,于是我反编译了下spring-webmvc.jar,发现spring2.0版本的jar的VelocityConfigurer是没有继承ServletContextAware这个接口的,我在网上也找了下资料,也说只有spring 2.5.6后面的版本才有,于是我现在
2.5.6的jar试了下,嗯,确实OK了
我的velocity的配置:
<!-- Velocity配置 -->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="configLocation" value="/WEB-INF/classes/web/velocity.properties"/>
</bean>
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="layoutUrl" value="layout/innerLayout.vm"/>
<property name="order" value="1"/>
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".vm"/>
<property name="dateToolAttribute" value="dateTool"/>
<property name="numberToolAttribute" value="numberTool"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="requestContextAttribute" value="requestContext"/>
<property name="contentType">
<value>text/html;charset=UTF-8</value>
</property>
<!--工具配置文件位置
<property name="toolboxConfigLocation">
<value>/WEB-INF/toolbox.xml</value>
</property>
-->
</bean>
<!-- Velocity配置 -->
---------------------------------------------------------------------------------------------
velocity.properties
input.encoding=UTF-8
output.encoding=UTF-8
#resource.loader=file
#file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader
#webapp.resource.loader.cache=false
resource.loader=webapp
webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.path=/WEB-INF/velocity/
webapp.resource.loader.cache=false
velocimacro.library=macros/pageNavigationDetail.vm,macros/pageNavigation.vm,macros/errorMacro.vm
directive.parse.max.depth=5
velocimacro.permissions.allow.inline=true
velocimacro.permissions.allow.inline.to.replace.global=false
velocimacro.permissions.allow.inline.local.scope=true
velocimacro.context.localscope=true
相关jar包见附件