首先需要添加freemarker.jar到项目,如果项目中有spring或者spirngmvc,需要整合,首先配置freemarkerConfig,代码结构如下:

        <!-- 设置freeMarker的配置文件路径 --><bean id="freemarkerConfiguration"class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="location" value="classpath:freemarker.properties" /></bean><bean id="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="freemarkerSettings" ref="freemarkerConfiguration" /> <property name="templateLoaderPath"><value>/WEB-INF/freemarker/</value></property><property name="freemarkerVariables"><!--设置一些常用的全局变量--><map><entry key="xml_escape" value-ref="fmXmlEscape" /><entry key="webRoot" value="/shop"></entry>  <entry key="jsRoot" value="/shop/js"></entry>   </map></property></bean>

其中一下代码是用来扫描.ftl的模板文件,在/web-info/freemarker目录中

<property name="templateLoaderPath"><value>/WEB-INF/freemarker/</value>
</property>

然后freemarker用ftl文件来呈现视图,这时候就需要配置freemarker的视图解析器,代码如下:

        <!-- 配置freeMarker视图解析器 --><bean id="freemarkerViewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /><property name="viewNames" value="*.ftl" /><property name="contentType" value="text/html; charset=utf-8" /><property name="cache" value="true" /><property name="suffix" value="" /><!--   <property name="exposeRequestAttributes" value="true" /><property name="exposeSessionAttributes" value="true" /><property name="exposeSpringMacroHelpers" value="true" /> --><property name="order" value="0" /></bean><!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 通用解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="" /><property name="viewNames" value="*.html,*.jsp" /><property name="suffix" value="" /><property name="viewClass"value="org.springframework.web.servlet.view.InternalResourceView" /><property name="order" value="1"></property></bean>

其中:<property name="order" value="0">代表了第一个匹配的是freemarker的视图解析器,如果匹配不成功,则自动选择order=1的其他解析器,目前的通用解析器可以解析.html跟.jsp的视图,如果需要其他视图的解析器,可以自行添加。

其中的exposeRequestAttributes  exposeSessionAttributes两个属性都被设置为true。结果是请求和会话属性都被复制到模板的属性集中,可以使用FreeMarker的表达式语言来访问并显示。

使用这些宏,必须设置FreeMarkerViewResolver的exposeSpringMacroHelpers属性为true

以上是freemarker与springmvc整合需要配置的xml文件。

------------------------------------------------------------------------------------------

下面来介绍一下在Java 代码中如何使用:

首先编写Freemarker的工具类,用来生成HTML文件的方法:

package com.hc.shop.common.tools;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig;import freemarker.template.Template;
import freemarker.template.TemplateException;/*** @author HuifengWang 静态化方法**/
public class FreeMarkerUtil {/*** * 生成HTML静态页面的公公方法* @param fmc * @param templateName 模板的名称* @param request* @param map 生成模板需要的数据* @param filePath 相对于web容器的路径* @param fileName 要生成的文件的名称,带扩展名* @author HuifengWang* */public static void createHtml(FreeMarkerConfig fmc, String templateName,HttpServletRequest request, Map<?, ?> map, String filePath,String fileName) {Writer out = null;try {Template template = fmc.getConfiguration().getTemplate(templateName);String htmlPath = request.getSession().getServletContext().getRealPath(filePath)+ "/" + fileName;File htmlFile = new File(htmlPath);if (!htmlFile.getParentFile().exists()) {htmlFile.getParentFile().mkdirs();}if (!htmlFile.exists()) {htmlFile.createNewFile();}out = new OutputStreamWriter(new FileOutputStream(htmlPath),"UTF-8");template.process(map, out);out.flush();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {out.close();out = null;} catch (IOException e) {e.printStackTrace();}}}/*** @param request* @param filePath  文件存放的路径* @param fileName 文件的名称,需要扩展名* @author HuifengWang* @return*/public static Map<String,Object> htmlFileHasExist(HttpServletRequest request,String filePath,String fileName) {Map<String,Object> map = new HashMap<String,Object>();String htmlPath = request.getSession().getServletContext().getRealPath(filePath)+ "/" + fileName;File htmlFile = new File(htmlPath);if(htmlFile.exists()){map.put("exist", true);}else{map.put("exist",false);}return map ;}
}

以上就是要生成HTML文件的工具类,参数注解都有,应该很好理解。

如何在Controller中调用??下面来看一个很简单的demo

@Autowiredprivate FreeMarkerConfig freeMarkerConfig;//获取FreemarkerConfig的实例@RequestMapping("/ttt")public String ttt(HttpServletRequest request,HttpServletResponse response,ModelMap mv) throws IOException, TemplateException, ServletException{String fileName ="ttt.html";Boolean flag =(Boolean)FreeMarkerUtil.htmlFileHasExist(request, FREEMARKER_PATH, fileName).get("exist");if(!flag){//如何静态文件不存在,重新生成Map<String,Object> map = new HashMap<String,Object>();map.put("user", "xiaowang小王");//这里包含业务逻辑请求等mv.addAllAttributes(map);FreeMarkerUtil.createHtml(freeMarkerConfig, "demo.ftl", request, map, FREEMARKER_PATH, fileName);//根据模板生成静态页面}return FREEMARKER_PATH+"/"+fileName;//始终返回生成的HTML页面}

以上就是如何在springmvc中使用Freemarker的具体实现方式,想要很好的了解,会用,熟悉Freemarker,还需要了解Freemarker的各种语法跟标签。慢慢学习。。。

转载于:https://my.oschina.net/HuifengWang/blog/300461

FreeMarker配置详解相关推荐

  1. 【笔记】spring的注解回顾,springboot-restful项目结构介绍 springboot-freemarker ⼯程配置详解

    注解 学Spring boot有一阵子了,总结一下它的注解. @Controller :修饰class,⽤来创建处理http请求的对象 @RestController :Spring4之后加⼊的注解, ...

  2. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  3. elasticsearch-.yml(中文配置详解)

    此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...

  4. (ASA) Cisco Web ××× 配置详解 [三部曲之一]

    (ASA) Cisco Web ××× 配置详解 [三部曲之一] 注意:本文仅对Web×××特性和配置作介绍,不包含SSL ×××配置,SSL ×××配置将在本版的后续文章中进行介绍.   首先,先来 ...

  5. mybatis 同名方法_MyBatis(四):xml配置详解

    目录 1.我们将 数据库的配置语句写在 db.properties 文件中 2.在 mybatis-configuration.xml 中加载db.properties文件并读取 通过源码我们可以分析 ...

  6. logback节点配置详解

    logback节点配置详解 一:根节点 <configuration></configuration> 属性 : debug : 默认为false ,设置为true时,将打印出 ...

  7. PM配置详解之一:企业结构

    1.维护计划工厂 功能说明 在公司结构中定义维护工厂(通常已经作为后勤工厂存在)和维护计划工厂(简称计划工厂). 维护工厂:设备所安装的位置,如某机组安装在合营公司,那么合营公司就是此机组的维护工厂, ...

  8. 转 Log4j.properties配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  9. Iptables防火墙配置详解

    iptables防火墙配置详解 iptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. (1)filter表负责过滤数 ...

最新文章

  1. 新一届最强预训练模型上榜,出于BERT而胜于BERT
  2. 对话腾讯AI Lab:即将开源自动化模型压缩框架PocketFlow,加速效果可达50%
  3. 送100本书!涵盖Java 、大数据、推荐系统、机器学习、黑客、数据库、手游、少儿编程等!免费包邮!...
  4. 系统管理员设置了系统策略,禁止进行此安装
  5. 同一个类 cannot be cast to_2021年动漫类年历推荐
  6. vue中私有样式(scoped)中修改其他组件的样式
  7. Python02期预科课程笔记索引
  8. 程序员面试金典 - 面试题 16.15. 珠玑妙算(map计数)
  9. vmware虚拟机克隆后不能联网
  10. 如何解除FSO上传程序小于200k限制?
  11. dbnetlib不存在或拒绝访问_idou老师教你学Istio 16:如何用 Istio 实现微服务间的访问控制...
  12. 【STM32 .Net MF开发板学习-09】AD模拟量采集
  13. 华为面试题:一头牛重 800 公斤,一座桥承重 700 公斤,请问牛怎么过桥?
  14. python 保存为tiff文件, 图像转tiff, tif文件添加投影
  15. windows 打补丁转载)
  16. Unity 之 发布PC端CPU高占用温度高的问题解决方案
  17. 推荐一些经典的学习书籍
  18. 【那些年我们用过的Redis】还记得大明湖畔那些Redis数据吗?
  19. 如何将某一文件添加到信任列表?
  20. 外卖 webpp2---hesdar组件

热门文章

  1. CCNP基础知识-路由(二)
  2. 拒绝“Xcode-Ghost门”,如何安全快速下载Xcode?
  3. 微前端框架之Wujie
  4. Ant的安装和intellij IDE的配置和使用
  5. crontab每月最后一天执行
  6. ASEMI代理FGH60N60SMD安森美ON原装原厂IGBT
  7. idea重复代码有下划波浪线
  8. SDCC 2016线上架构峰会顾问团、嘉宾、议题、日程大公开(免费报名)
  9. 参加scrum中文网ScrumMaster认证培训
  10. 30秒完成工作?终于知道Python这个技能有多重要!