热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:FreeMarker实现网页静态化

1、FreeMarker实现网页静态化。FreeMarker是一个用Java语言编写的模板引擎,它基于模板来

1、FreeMarker实现网页静态化。

  FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。目前企业中:主要用Freemarker做静态页面或是页面展示。

2、使用freemarker需要的jar。

  a)、把下载到的jar包(freemarker-2.3.23.jar)放到webappWEB-INFlib目录下。官方网站:http://freemarker.org/

  b)、如果使用的是Maven结构,可在pom.xml中引入以下坐标。

1
2 org.freemarker
3 freemarker
4 2.3.23
5

 3、Freemarker原理图。模板 +  数据模型 = 输出

技术图片

4、freemarker的测试案例如下所示:

1 package com.taotao.freemarker;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Writer;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import org.junit.Test;
11
12 import freemarker.template.Configuration;
13 import freemarker.template.Template;
14 import freemarker.template.TemplateException;
15
16 /**
17 * freemarker网页静态化
18 *
19 * @ClassName: TaoTaoFreemarker.java
20 * @author: biehl
21 * @since: 2019年9月21日 下午5:46:49
22 * @Copyright: ©2019 biehl 版权所有
23 * @version: 0.0.1
24 * @Description:
25 */
26 public class StaticPageFreemarker {
27
28 @Test
29 public void freemarkerStaticPage() {
30 try {
31 // 1、创建一个模板文件
32 // 2、创建一个Configuration对象
33 Configuration cOnfiguration= new Configuration(Configuration.getVersion());
34
35 // 3、设置模板所在得路径
36 configuration.setDirectoryForTemplateLoading(
37 new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl"));
38
39 // 4、设置模板得字符集,一般使用utf-8
40 configuration.setDefaultEncoding("utf-8");
41
42 // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
43 Template template = configuration.getTemplate("hello.ftl");
44
45 // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
46 Map data = new HashMap<>();
47 data.put("hello", "hello fremarker!!!");
48
49 // 7、创建一个Writer对象,指定输出文件的路径以及文件名
50 Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\hello.txt"));
51
52 // 8、使用模板对象的process方法输出文件
53 template.process(data, out);
54
55 // 9、关闭流
56 out.close();
57 } catch (IOException e) {
58 e.printStackTrace();
59 } catch (TemplateException e) {
60 e.printStackTrace();
61 }
62
63 }
64 }

相关文件如下所示:

技术图片

5、fremarker模板的语法学习。

1 package com.taotao.freemarker;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Writer;
7 import java.util.ArrayList;
8 import java.util.Date;
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 import org.junit.Test;
14
15 import com.taotao.pojo.Student;
16
17 import freemarker.template.Configuration;
18 import freemarker.template.Template;
19 import freemarker.template.TemplateException;
20
21 /**
22 * freemarker网页静态化
23 *
24 * @ClassName: TaoTaoFreemarker.java
25 * @author: biehl
26 * @since: 2019年9月21日 下午5:46:49
27 * @Copyright: ©2019 biehl 版权所有
28 * @version: 0.0.1
29 * @Description:
30 */
31 public class StaticPageFreemarker {
32
33 @Test
34 public void freemarkerStaticPage() {
35 try {
36 // 1、创建一个模板文件
37 // 2、创建一个Configuration对象
38 Configuration cOnfiguration= new Configuration(Configuration.getVersion());
39
40 // 3、设置模板所在得路径
41 configuration.setDirectoryForTemplateLoading(
42 new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl"));
43
44 // 4、设置模板得字符集,一般使用utf-8
45 configuration.setDefaultEncoding("utf-8");
46
47 // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
48 // Template template = configuration.getTemplate("hello.ftl");
49 Template template = configuration.getTemplate("student.ftl");
50
51 // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
52 Map data = new HashMap<>();
53 data.put("hello", "hello fremarker!!!");
54 Student stu = new Student(1, "小辣椒", 25, "北京市西城区西什库大街31号院");
55 // 注意,对象的key就是模板里面的对应的.前面的对象名称
56 data.put("student", stu);
57
58 // freemarker遍历集合对象
59 List stuList = new ArrayList();
60 stuList.add(new Student(1008611, "小辣椒1号", 25, "北京市西城区西什库大街30号院"));
61 stuList.add(new Student(1008612, "小辣椒2号", 21, "北京市西城区西什库大街32号院"));
62 stuList.add(new Student(1008613, "小辣椒3号", 22, "北京市西城区西什库大街33号院"));
63 stuList.add(new Student(1008614, "小辣椒4号", 23, "北京市西城区西什库大街34号院"));
64 stuList.add(new Student(1008615, "小辣椒5号", 24, "北京市西城区西什库大街35号院"));
65 stuList.add(new Student(1008616, "小辣椒6号", 20, "北京市西城区西什库大街36号院"));
66 stuList.add(new Student(1008617, "小辣椒7号", 18, "北京市西城区西什库大街31号院"));
67 data.put("stuList", stuList);
68
69 // 日期类型的处理
70 data.put("date", new Date());
71
72 // null值得处理
73 data.put("val", null);
74
75 // 7、创建一个Writer对象,指定输出文件的路径以及文件名
76 Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\student.html"));
77
78 // 8、使用模板对象的process方法输出文件
79 template.process(data, out);
80
81 // 9、关闭流
82 out.close();
83 } catch (IOException e) {
84 e.printStackTrace();
85 } catch (TemplateException e) {
86 e.printStackTrace();
87 }
88
89 }
90 }

freemarker模板如下所示:

1
2
3
4
5
6


7
8 学生信息:

9 学号:${student.id}

10 姓名:${student.name}

11 年龄:${student.age}

12 家庭住址:${student.address}



13 学生列表:

14 "1">
15
16
17
18
19
20
21
22
23 <#list stuList as stu>
24
25 <#if stu_index%2==0>
26"yellow">
27 <#else>
28"purple">
29#if>
30
31
32
33
34
35
36
37
38
序号 学号 姓名 年龄 家庭住址
${stu_index} ${stu.id} ${stu.name} ${stu.age} ${stu.address}

39



40
51 年:月:日:${date?date}

52 年:月:日 时:分:秒:${date?datetime}

53 时:分:秒:${date?time}

54 年/月/日:${date?string("yyyy/MM/dd")}

55 日期类型的处理:${date?string("yyyy/MM/dd HH:mm:ss")}
56



57
58 方式一、null值的处理:${val!}
59

60 方式二、为Null时给默认值
61 ${val!"我是默认值"}
62

63 方式三、使用if判断null值:
64 <#if val??>
65 val是有值的.
66 <#else>
67 val值为null.
68 #if>
69



70
71 include标签测试:
72 <#include "hello.ftl">
73

74
75

效果如下所示:

技术图片

6、freemarker与spring整合。由于使用的maven项目,所以引入相应的依赖jar包。

1
2 org.springframework
3 spring-context-support
4 4.1.3.RELEASE
5

6
7 org.freemarker
8 freemarker
9 2.3.23
10

在ApplicationContext.xml中添加如下内容:

1 "freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
2 "templateLoaderPath" value="/WEB-INF/freemarker/" />
3 "defaultEncoding" value="UTF-8" />
4

整合代码实现如下所示:

1 package com.taotao.item.controller;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.Writer;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.ResponseBody;
13 import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
14
15 import freemarker.template.Configuration;
16 import freemarker.template.Template;
17
18 /**
19 *
20 * @ClassName: HtmlGenController.java
21 * @author: biehl
22 * @since: 2019年9月26日 下午8:15:01
23 * @Copyright: ©2019 biehl 版权所有
24 * @version: 0.0.1
25 * @Description:
26 */
27 @Controller
28 public class HtmlGenController {
29
30 @Autowired
31 private FreeMarkerConfigurer freeMarkerConfigurer;
32
33 @RequestMapping("/genhtml")
34 @ResponseBody
35 public String genHtml() throws Exception {
36 // 生成静态页面
37 Configuration cOnfiguration= freeMarkerConfigurer.getConfiguration();
38 Template template = configuration.getTemplate("hello.ftl");
39 Map data = new HashMap<>();
40 data.put("hello", "spring freemarker test");
41 Writer out = new FileWriter(new File("D:/test.html"));
42 template.process(data, out);
43 out.close();
44 // 返回结果
45 return "OK";
46 }
47
48 }

 

 

待续......


推荐阅读
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
author-avatar
up61
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有