idea freemarker热部署,自动加载修改的ftl页面
web.xml 缓存
如果web.xml里面存在类似下面的代码,就要把它注释掉,否则修改freemarker页面再刷新浏览器是不会生效的。
<filter>
<filter-name>productCacheFilter</filter-name>
<filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
<init-param>
<param-name>cacheName</param-name>
<param-value>product</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>productCacheFilter</filter-name>
<url-pattern>/product/list/*</url-pattern>
</filter-mapping>
这段代码是采用ehcache来缓存页面。
springmvc 设置解析器 缓存设置
<bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl"/>
<property name="order" value="0"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<!-- 此变量值为pageContext.request, 页面使用方法:rc.contextPath -->
<property name="requestContextAttribute" value="rc"/>
<property name="cache" value="false"/>
</bean>
这里关键是让 cache设置为 false.
开发环境下为false, 线上环境是true, 避免所有缓存
freemarker 缓存设置
<!-- 配置FreeMarkerConfigurer -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
</props>
</property>
</bean>
这里关键是设置 template_update_delay 为0 ,因此每次在刷新 free marker页面时,均会进行修改时间 的校验,判断是否应该重新载入。