相关文章推荐
时尚的佛珠  ·  mysql DDL ...·  11 月前    · 
考研的乌龙茶  ·  java 获取图片地址 ...·  1 年前    · 
乖乖的灯泡  ·  SpringBoot第七讲Spring ...·  2 年前    · 
旅途中的柿子  ·  Error Installing ...·  2 年前    · 

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页面时,均会进行修改时间 的校验,判断是否应该重新载入。