Freemarker入门小案例(生成静态网页的其中一种方式)
其实生成静态网页的方式有好多种,我昨天看了一下,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入门小案例(生成静态网页的其中一种方式)相关推荐
- JavaWeb:shiro入门小案例
学习原因:刚接触Javaweb的时候懂的很少(当然现在也不多),所以开发一个小项目都是自己从头写到尾,从登录界面一直到数据库,当时想以后开发要是都这么写那不是很枯燥?!-知道后来团队开发,接触的开发人 ...
- 编辑器生成静态网页_使用静态网站生成器的7个理由
编辑器生成静态网页 Static site generators have become increasingly popular and, if my prediction is correct, ...
- 编辑器生成静态网页_不使用静态网站生成器的7个理由
编辑器生成静态网页 Trending posts on SitePoint today: 今天在SitePoint上的热门帖子: 7 Ways to Make WordPress Simpler fo ...
- axios vue 回调函数_Vue 02 —— Vue 入门小案例~使用 Axios 中的GET、POST请求
作为后端攻城狮,写前端代码是一种什么体验? 相信不少人和 @Python大星 一样,有写过前端代码的经历. 记录一下,Vue 框架开发中"啼笑皆非"的故事,非专业前端人员,该案例无 ...
- spring boot入门小案例
spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...
- python利用dominate库生成静态网页
HTML报告:python利用dominate库生成静态网页 dominate 简介 一个生成页面的简单例子 标记的属性 如何生成复杂的文档结构 访问内容和属性 渲染 上下文管理器 装饰器 创建文档 ...
- 采用html模板生成静态网页
利用自己已有的XML配置读取和格式化数据的功能,采用自定义标签实现网站页面html模板生成静态网页. 自定义标签如下: #表名.记录索引.字段名# 例如:#t.0.id#表示t表的第一行的id字段的值 ...
- 微信小程序生成二维码的两种方式
微信小程序生成二维码的两种方式 2020/11/10 第一种,利用网络api自动生成 <image class="xin-erma" src="{{'https:/ ...
- 微信小程序设置背景图的几种方式
微信小程序设置背景图的几种方式 原本在html中可以通过background-image来设置背景图片 .page {width: 100%;height: 100%;background-size: ...
最新文章
- STC单片机高速下载电路改进
- java基本数据类型_老杜带你学Java【第六课】
- 面向对象的特点封装、继承、多态
- ubuntu mysql 多端口_ubuntu 16.04下mysql5.7.17开放远程3306端口
- 关于同源策略的一些想法
- 依赖配置中心实现注有@ConfigurationProperties的bean相关属性刷新
- python读取大文件的坑_Python读取大文件的坑“与内存占用检测
- LINUX weblogic集群搭建- 03启动脚本的控制
- 数据结构笔记(二十四)-- 哈夫曼编译码
- 解决mysql编码问题_解决mysql乱码问题
- 数据结构严蔚敏清华大学pdf_2021年清华(清华大学)电子信息考研
- 双线性映射matlab,matlab用双线性变换法设计IIR数字滤波器
- python识别cad图纸_手把手教你广联达软件如何识别天正CAD图纸
- c语言相机翻译器下载,拍照翻译器
- F.conv2d实现代码
- 2020读书笔记 《马歇尔传记》
- windows那么多图标都在哪里?
- 2018/09/25渡课
- 狂神说SpringBoot最全笔记
- 问题 Q: 5.18 兔子繁殖(2级)假设一对兔子(一雌一雄)每个月可繁殖出一对小兔子来,并且所有的兔子都不死,这样从第一个月开始在笼中圈养一对有繁殖能力的小兔子,那么month个月可以繁殖多少对兔子
热门文章
- zend studio搭建php开发环境搭建,PHP-Zend Studio PHP环境的搭建
- rock-paper-scissors
- 51nod 1073 约瑟夫环
- XXL-Job分布式任务调度
- LeetCode 143. 重排链表(Reorder List)
- yyyyMMddHHmmss转变为日期格式
- 【云计算虚拟化】docker在ubuntu14.04下的安装
- java生成HMACSHA256的方法
- Rainbond最佳实践:Tomcat配置Redis实现Session共享
- 钉钉内部视频遭曝光:疯子无招“逼疯”产品经理