1、 Freemarker概念

1.1 什么是freemarker

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

1.2 Freemarker的使用方法

第一步:把freemarker的jar包添加到工程中

第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

第三步:创建一个Configration对象

第四步:告诉config对象模板文件存放的路径。

第五步:设置config的默认字符集。一般是utf-8

第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。

第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

第十步:关闭writer对象。

1.3 代码实现

  1. public class FreeMarkerTest {
  2.  
  3. @Test
  4. public void testFreeMarker() throws Exception {
  5. // 第一步:把freemarker的jar包添加到工程中
  6. // 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
  7. // 第三步:创建一个Configuration对象
  8. Configuration configuration = new Configuration(Configuration.getVersion());
  9. // 第四步:告诉config对象模板文件存放的路径。
  10. configuration.setDirectoryForTemplateLoading(new File("D:\\workspaces\\portal\\src\\main\\webapp\\WEB-INF\\ftl"));
  11. // 第五步:设置config的默认字符集。一般是utf-8
  12. configuration.setDefaultEncoding("utf-8");
  13. // 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
  14. Template template = configuration.getTemplate("first.ftl");
  15. // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
  16. Map root = new HashMap<>();
  17. root.put("hello", "hello freemarker");
  18. // 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
  19. Writer out = new FileWriter(new File("D:\\temp\\html\\hello.html"));
  20. // 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
  21. template.process(root, out);
  22. // 第十步:关闭writer对象。
  23. out.flush();
  24. out.close();
  25. }
  26. }

模板:

${hello}

2、 Freemarker模板的写法

2.1 取简单数据类型数据

使用EL表达式。

${hello}

2.2 包装数据类型

模板:

  1. <html>
  2. <head>
  3. <title>${title}</title>
  4. </head>
  5. <body>
  6. <label>学号:</label>${student.id}<br>
  7. <label>姓名:</label>${student.name}<br>
  8. <label>住址:</label>${student.address}<br>
  9. </body>
  10. </html>

2.3 历遍集合/数组

  1. List<Person> persons = new ArrayList<Person>();
  2.  
  3. 省略….
  4.  
  5. 页面中内容
  6.  
  7. <#list persons as p>
  8.  
  9. ${p.id}/${p.name}
  10.  
  11. </#list>

2.4 获得当前迭代的索引

  1. List<Person> list = new ArrayList<Person>();
  2.  
  3. 获取当前选代的索引:<br/>
  4. <#list persons as p>
  5. ${p_index}
  6. </#list>

2.5 模板中判断条件

  1. <#if 判断条件>
  2. <#else>
  3. </#if>
  4.  
  5. 逻辑运算符(== != || &&)

2.6 日期类型格式化

  1. 默认格式
  2. 1date
  3. ${cur_time?date}
  4. 2datetime
  5. ${cur_time?datetime}
  6. 3time
  7. ${cur_time?time}
  8.  
  9. 自定义格式
  10. ${cur_time?string("yyyy-MM-dd HH:mm:ss")}

2.7 处理null值

  1. root.put(“val”,null);
  2.  
  3. 解决办法
  4. 1:null 空串
  5. ${val!} ${val!"这里是空"}
  6. 2:为Null时给默认值
  7. ${val!"我是默认值"}
  8. 3、时间类型判断为空
    <#if curdate ??>
  9. 当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}
  10. <#else>
  11. curdate属性为null
  12. </#if>

2.8 Include

  1. 将另一个页面引入本页面时可用以下命令完成
  2.  
  3. <#include "/include/head.html">

3、项目中使用freemarker

使用freemarker整合spring。把Configuration交给spring容器管理。

依赖的jar包:

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context-support</artifactId>
  4. <version>4.1.3.RELEASE</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>org.freemarker</groupId>
  9. <artifactId>freemarker</artifactId>
  10. <version>2.3.23</version>
  11. </dependency>

3.1 Spring配置文件

在Spring中配置Configration对象

  1. <bean id="freemarkerConfig"
  2. class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  3. <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
  4. <property name="defaultEncoding" value="UTF-8" />
  5. </bean>

第一个参数是模板存放路径,第二个字符编码

3.2 静态文件生成的时机

1、当用户第一次访问时生成静态文件。不推荐使用。

原因:高并发的情况下,容易将不完整的静态页面传递给前台用户。

2、当后台添加、编辑商品时生成静态网页。

此时,需要前台系统发布服务,供后台系统调用,当后台添加或者修改商品时调用此服务。此时前台系统的功能就是生成静态页面。

3.3 整合代码

  1. @Override
  2. public Result genItemHtml(Long itemId) throws Exception {
  3. //商品基本信息
  4. TbItem tbItem = itemService.getItemById(itemId);
  5. //商品描述
  6. String itemDesc = itemService.getItemDescById(itemId);
  7. //规格参数
  8. String itemParam = itemService.getItemParamById(itemId);
  9. //生成静态页面
  10. Configuration configuration = freeMarkerConfigurer.getConfiguration();
  11. Template template = configuration.getTemplate("item.ftl");
  12. //创建一个数据集
  13. Map root = new HashMap<>();
  14. //向数据集中添加属性
  15. root.put("item", tbItem);
  16. root.put("itemDesc", itemDesc);
  17. root.put("itemParam", itemParam);
  18. //创建一个Writer对象
  19. Writer out = new FileWriter(new File(STATIC_PAGE_PATH + itemId + ".html"));
  20. //生成静态文件
  21. template.process(root, out);
  22. out.flush();
  23. out.close();

      return Result.ok();

}

3.4 访问配置

可以参考我之前写的

二、nginx搭建图片服务器

3.5 报错406问题

由于请求的url的后缀为.html,要求返回为一个字符串页面。所以报错

解决方法:不要使用*.html的后缀,配置多个servlet-mapping,拦截其他的后缀,如*.action

 注:其实解决方案很多,本文写的这种是生成文件放在硬盘,使用http服务器访问静态文件。还有一种应用很广泛的解决方案,就是类似jsp的配置,实际就是配置一个视图解析器,流程和使用jsp一样,用户在请求这个页面时,将生成的静态页面直接呈现在用户面前,硬盘并不保存这个页面。

Freemarker的使用方法的更多相关文章

  1. FreeMarker 的使用方法

    1.FreeMarker 概述 FreeMarker 是一个用Java语言编写的模板引擎,使用模板来生成文本输出;主要用于做静态页面或页面展示; 2.FreeMarker 使用 // 导入jar包: ...

  2. 161213、Maven资源替换和Freemarker模板

    先介绍一下本文的两位主角: Apache Maven - 正当红的项目管理工具 FreeMarker - 老牌的模板引擎 两者貌似互不相干,何来冲突呢? 原来Maven有一个内置的资源替换机制, 可以 ...

  3. 巧用Freemarker的自定义方法

    要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在f ...

  4. [转]SpringMVC日期类型转换问题三大处理方法归纳

    http://blog.csdn.net/chenleixing/article/details/45190371 前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日 ...

  5. SpringMVC日期类型转换问题三大处理方法归纳

    方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...

  6. freemarker的使用

    一:freemarker是什么? freemarker是一个模板引擎,基于定义的模板和数据生成对应的文本(HTML,xml,java等),是一个生成文本的工具. 二:freemarker的使用方法 ( ...

  7. freemarker是什么东西?

    前言 由于考虑到网站访问量,以及tocmat可能承受的最大访问压力,我们需要引进一些比较好的技术,来解决这个问题.所以在项目快要结束之际又收到消息,我们要考虑到这些问题然后对现在的项目进行改进,于是就 ...

  8. 【转】使用Freemarker实现网页静态化

    使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...

  9. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

随机推荐

  1. 五. Java集合概要

    了解了Java内存相关的内容后,现在来简单介绍下Java的集合. Set:不含有重复数据的集合.常用的对象HashSet,TreeSet,LinkedHashSet.HashSet拥有很好的性能,其数 ...

  2. css鼠标样式cursor

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Linux(8)查看服务器系统信息

    查看服务器系统信息 ql@ql:~$ uname -n -r -p -o ql 4.2.0-35-generic x86_64 GNU/Linux ql@ql:~$ 查看linux系统类型和版本 ql ...

  4. Oracle数据库常用关键字以及函数

    常用关键字 insert into---插入数据 delete---删除数据 update---更新一条数据 select---实际工作中尽量不要写* set---设置某些属性 where---给执行 ...

  5. Unity 发布的 WebGL 使用SendMessage传递多个参数

    如果要实现Unity与浏览器的数据交互一般都会采用两种方式 方法一: Application.ExternalCall("SayHello","helloworld&qu ...

  6. idea如何添加外部jar包

    假设我们要将G:\ModuleAPI_Java_2.2.0.0 .jar导入工程中: 首先,在mvn命令行执行下面命令: mvn install:install-file -Dfile=G:\Modu ...

  7. 王佩丰第一讲 认识excel笔记

    改变工作表表浅颜色 批量插入工作表 选择多张工作表然后插入 找到表格边界区域快捷键(找到表格的最后一行):快速到达最上下左右端 点击边框上下左右双击 从指定的位置开始冻结窗格 输入今天的日期 快捷键c ...

  8. 使用MySQL-Proxy读写分离时的注意事项

    在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSync ...

  9. 剑指OFFER的跳台阶问题

    一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. (斐波那契数列的变形) F(1)=1;F(2)=2; F(n)=F(n-1)+F(n-2); class S ...

  10. S7-300之间的PROFIBUS-DP主从通信

    一.PROFIBUS-DP简介 1.由来 2..总线连接器 二.系统结构示例 三.组态过程示例 三,DP网络组态 1.新建一个项目和两个300站点如下 2.组态从站DP网络 1)点击常规中的属性 2) ...