热门标签 | 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 }

 

 

待续......


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
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社区 版权所有