其实生成静态网页的方式有好多种,我昨天看了一下,Freemarker是其中一种,但是Freemarker现在我们都用得比较少了,现在用得ActiveMQ用来发送信息到静态页面,不过想了一下这个小东西,还是想给大家分享一下,我的小小心得。

若项目为Maven项目,那么可以如下

在Pom.xml文件里面添加

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.16</version></dependency>

CreateFreemarkerStatic.java

package com.llmj.DemoTest.Test;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class CreateFreeMarkStatic {/*** * @Description * @author xebest-pc* @param name* @return*/public Template getTemplate(String name) {try {// 通过Freemaker的Configuration读取相应的ftlConfiguration cfg = new Configuration();// 设定去哪里读取相应的ftl模板文件cfg.setClassForTemplateLoading(this.getClass(), "/ftl");// 在模板文件目录中找到名称为name的文件Template temp = cfg.getTemplate(name);return temp;} catch (IOException e) {e.printStackTrace();}return null;}/***  控制台输出* @Description * @author xebest-pc* @param name* @param root*/public void print(String name, Map<String, Object> root){try {// 通过Template可以将模板文件输出到相应的流Template temp = this.getTemplate(name);temp.process(root, new PrintWriter(System.out));} catch (TemplateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 输出HTML文件* @Description * @author xebest-pc* @param name* @param root* @param outFile*/public void fprint(String name, Map<String, Object> root, String outFile) {FileWriter out = null;try {// 通过一个文件输出流,就可以写到相应的文件中,此处用的是绝对路径out = new FileWriter(new File("E:/workspace/freemarkprj/page/" + outFile));Template temp = this.getTemplate(name);temp.process(root, out);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {if (out != null)out.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args){Map<String,Object> root=new HashMap<String,Object>();root.put("username", "zhangsan");//在ftl中要赋值的变量CreateFreeMarkStatic util= new CreateFreeMarkStatic();util.fprint("01.ftl", root, "01.html");}}

建立对应的实体类User.java

package com.llmj.DemoTest.entity;
import java.io.Serializable;@SuppressWarnings("serial")
public class User implements Serializable {private int id;private String name;private int age;private Group group;public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}public User() {}public User(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

Group.java

package com.llmj.DemoTest.entity;public class Group {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}

2 、在src目录下建个ftl包,用于存放ftl模板文件,this.getClass() 就是根据当前类的路径获取模板文件位置

01.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
</head><body>
<h1>你好${username}</h1>
</body>
</html>

02.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head><body>
<h1>你好: ${username}</h1>
</body>
</html>

03.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${user.id}-----${user.name}-----${user.age}</h1>
<#if user.age lt 12>${user.name}还是一个小孩
<#elseif user.age lt 18>${user.name}快成年
<#else>${user.name}已经成年
</#if>
</body>
</html>

04.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</body>
</html>

05.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head><body>
<hr/>
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</body>
</html>

06.ftl

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head><body>
${user.id}-------${user.name}------${user.group!}  <#-- !后为空就不输出  -->
<#--${user.group.name!}--><#-- 按照以上的方式加! freemarker仅仅只会判断group.name是不是空值 -->
${(user.group.name)!"1234"} ${(a.b)!"没有a.b元素"}<#--
!:指定缺失变量的默认值
??:判断某个变量是否存在,返回boolean值
-->
<#if (a.b)??> <#--if后不用加$-->不为空
<#else>为空
</#if>
</body>
</html>

然后最后附上测试类FreemarkTest.java

import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.junit.Test;import com.llmj.DemoTest.entity.Group;
import com.llmj.DemoTest.entity.User;public class FreemarkerTest {@Testpublic void test(){CreateFreeMarkStatic util = new CreateFreeMarkStatic();Map<String, Object> map = new HashMap<String, Object>();Group group = new Group();group.setName("IT");User user = new User();user.setId(001);user.setName("张三");user.setAge(12);user.setGroup(group);List<User> users = new ArrayList<User>();users.add(user);users.add(user);users.add(user);map.put("user", user);//普通EL赋值//util.fprint("01.ftl", map, "01.html" );//判断//util.fprint("03.ftl", map, "03.html");//遍历//util.print("05.ftl", map);//子元素判断util.print("06.ftl", map);}
}

这样就可以测试了

转载于:https://www.cnblogs.com/yaomajor/p/5694624.html

Freemarker入门小案例(生成静态网页的其中一种方式)相关推荐

  1. JavaWeb:shiro入门小案例

    学习原因:刚接触Javaweb的时候懂的很少(当然现在也不多),所以开发一个小项目都是自己从头写到尾,从登录界面一直到数据库,当时想以后开发要是都这么写那不是很枯燥?!-知道后来团队开发,接触的开发人 ...

  2. 编辑器生成静态网页_使用静态网站生成器的7个理由

    编辑器生成静态网页 Static site generators have become increasingly popular and, if my prediction is correct, ...

  3. 编辑器生成静态网页_不使用静态网站生成器的7个理由

    编辑器生成静态网页 Trending posts on SitePoint today: 今天在SitePoint上的热门帖子: 7 Ways to Make WordPress Simpler fo ...

  4. axios vue 回调函数_Vue 02 —— Vue 入门小案例~使用 Axios 中的GET、POST请求

    作为后端攻城狮,写前端代码是一种什么体验? 相信不少人和 @Python大星 一样,有写过前端代码的经历. 记录一下,Vue 框架开发中"啼笑皆非"的故事,非专业前端人员,该案例无 ...

  5. spring boot入门小案例

    spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...

  6. python利用dominate库生成静态网页

    HTML报告:python利用dominate库生成静态网页 dominate 简介 一个生成页面的简单例子 标记的属性 如何生成复杂的文档结构 访问内容和属性 渲染 上下文管理器 装饰器 创建文档 ...

  7. 采用html模板生成静态网页

    利用自己已有的XML配置读取和格式化数据的功能,采用自定义标签实现网站页面html模板生成静态网页. 自定义标签如下: #表名.记录索引.字段名# 例如:#t.0.id#表示t表的第一行的id字段的值 ...

  8. 微信小程序生成二维码的两种方式

    微信小程序生成二维码的两种方式 2020/11/10 第一种,利用网络api自动生成 <image class="xin-erma" src="{{'https:/ ...

  9. 微信小程序设置背景图的几种方式

    微信小程序设置背景图的几种方式 原本在html中可以通过background-image来设置背景图片 .page {width: 100%;height: 100%;background-size: ...

最新文章

  1. STC单片机高速下载电路改进
  2. java基本数据类型_老杜带你学Java【第六课】
  3. 面向对象的特点封装、继承、多态
  4. ubuntu mysql 多端口_ubuntu 16.04下mysql5.7.17开放远程3306端口
  5. 关于同源策略的一些想法
  6. 依赖配置中心实现注有@ConfigurationProperties的bean相关属性刷新
  7. python读取大文件的坑_Python读取大文件的坑“与内存占用检测
  8. LINUX weblogic集群搭建- 03启动脚本的控制
  9. 数据结构笔记(二十四)-- 哈夫曼编译码
  10. 解决mysql编码问题_解决mysql乱码问题
  11. 数据结构严蔚敏清华大学pdf_2021年清华(清华大学)电子信息考研
  12. 双线性映射matlab,matlab用双线性变换法设计IIR数字滤波器
  13. python识别cad图纸_手把手教你广联达软件如何识别天正CAD图纸
  14. c语言相机翻译器下载,拍照翻译器
  15. F.conv2d实现代码
  16. 2020读书笔记 《马歇尔传记》
  17. windows那么多图标都在哪里?
  18. 2018/09/25渡课
  19. 狂神说SpringBoot最全笔记
  20. 问题 Q: 5.18 兔子繁殖(2级)假设一对兔子(一雌一雄)每个月可繁殖出一对小兔子来,并且所有的兔子都不死,这样从第一个月开始在笼中圈养一对有繁殖能力的小兔子,那么month个月可以繁殖多少对兔子

热门文章

  1. zend studio搭建php开发环境搭建,PHP-Zend Studio PHP环境的搭建
  2. rock-paper-scissors
  3. 51nod 1073 约瑟夫环
  4. XXL-Job分布式任务调度
  5. LeetCode 143. 重排链表(Reorder List)
  6. yyyyMMddHHmmss转变为日期格式
  7. 【云计算虚拟化】docker在ubuntu14.04下的安装
  8. java生成HMACSHA256的方法
  9. Rainbond最佳实践:Tomcat配置Redis实现Session共享
  10. 钉钉内部视频遭曝光:疯子无招“逼疯”产品经理