freeMark
1. 什么是freemark
2.一般的用途:
l 能用来生成任意格式的文本:HTML,XML,RTF,JAVA源码,等等.
3.基本目标:代替以前的jsp显示页面
注意一般用freemarke来做哪些jsp页面:
1. 多查询页面
2.操作少的页面只是单纯的展示 比如新闻页面
3.访问量比较大的网站
优点 : 访问速度快 效率高
每次查询不进入数据库 缓解数据库压力
防止前台的高并发
freemark是需要jar包的
freemerk是要导入jar包的
导入freemark的jar 包 一下用的是 2.3.16.jar 包 有文件
maven : 坐标
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.16</version>
</dependency>
第一个简单例子:
控制台输出
//1、创建数据模型
Map<String,Object> root = new HashMap<String,Object>();
//2、为数据模型添加值
root.put("user", "橙子");
root.put("url", "www.baidu.com");
root.put("name", "王博");
//3.指定一个你要使用的模板名字 模型的名字不一定是 .ftl 文件
String name="tempalte_news.shtml";
//4.通过Freemaker的Configuration读取相应的ftl文件 用的是template 接受模板
Configuration cfg = new Configuration();
//设定去哪里读取相应的ftl模板文件
cfg.setClassForTemplateLoadin
uiuuug(TestYang.class,"../template")
//然后在模板文件目录中找到名称为name的文件 这样一个模板就找到了 temp
Template temp = cfg.getTemplate(name);
//5.最后一步 把模板和你的数据模板处理加工一下 就是说融合一下 并且输出
temp.process(root, new PrintWriter(System.out));
// 需要抛异常的!!!!
生成的静态页面
public void fprint(String name,Map<Object,Object> rootList,String outFile) {
//name 是要使用的模板名称 rootList 是数据模型 注意事项: 必须是Map
// outFile 是要生成的静态化页面
FileWriter out = null;
try {
//通过一个文件输出流FileWriter,就可以写到相应的文件中
//获取文件得保存路径
String rootPath=getClass().getResource("/").getFile().toString();
rootPath = rootPath.replace("/build/classes", "/WebContent/WEB-INF");
System.out.println(rootPath);
//实例化文件输出流
out = new FileWriter(new File(rootPath+"html/"+outFile));
//根据名字查询索要的模板
Template temp = this.getTemplate(name);
// temp是使用的模板 root为数据模板 out是写出的文件物理地址 temp
temp.process(rootList, out);
System.out.println(outFile+"生成成功!!!");
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
try {
if(out!=null) out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
模板:
<#list rootList as user>
<tr>
<td>${user.userId}</td>
<td>${user.userName}</td>
<td>${user.userAccount}</td>
<td>${user.userPw}</td>
<td>
<#if user.userSex == 1>
男
<#elseif user.userSex == 2>
女
<#else>
没选
</#if>
</td>
<td>删除</td>
</tr>
</#list>
注意事项:
在显示时使用的list 循环标签 其实里面循环的是Map
freemerk 标签!!!
循环迭代标签
list 和 <#break>
//sequence 要循环的属性 好比c 标签的里面的 items
// item 是你循环后的属性名类似c 标签里面的 var
//注意事项: sequence 是map里的键
<#list sequence as item>
</#list>
<#break> //跳出list循环
实例:
<#list users as user>
${user.id}---------${user.name}-------${user.age}<br/>
</#list>
</#list> 其他属性:
item_index:是list当前值的下标
item_has_next:判断list是否还有值
<#if 判断条件>
<#if x = 1>
</#if>
<#if 判断条件> 和<#else 判断条件>
<#if x = 1>
x is 1
<#else>
x is not 1
</#if>
<#if><#else if ><#else> 联合使用
<#if x == 1>
x is 1
<#else x == 2>
x is 2
<#else>
x not 1 or 2
</#if>
日期转换
<#--日期也不能直接输出,需要转换为字符串String-->
注意事项:<#--${now?string}没有为日期设定格式也会报错-->
${值?string("yyyy-MM-dd HH:mm:ss")}
实例:
用户生日:
${user.userBir?string("yyyy-MM-dd")}
声明和定义
定义:<#assign 属性='值'>;
取${属性}
实例:
<#--定义变量-->
<#assign username="王博"/>
${username}
freeMark的更多相关文章
- EL表达式判断条件要写在${}内
由于老没开发框架了,今天提取公共省市县三级联动组件时,使用jsp传参搞了半天才弄出来. 组件代码 $(function(){console.log("${param.init}") ...
- EXCEL应用:高级筛选里的条件或和与的条件怎么写 例:不包含,包含等
============================================================= a列包含b列,在c列中显示b列信息, =INDEX(B:B,MIN(IF(I ...
- if语句中同时判断多个条件的多种方法
总结一下自己经常用到的python中的if语句同时判断多个条件的不同方法,假设有: x, y, z = 0, 1, 0 方法一,多个逻辑运算符一起使用,这也是最常用的写法: if x == 1 or ...
- If 条件左边写常量?
if判断时,常量最好写左边 例如: 编程规范反复强调变量放在双等号的右边,常量放在左边,就是为了规避出现 If (ulCnt = 0)这种语法正确,但是极有可能是笔误的情况.为了杜绝这种不必要的逻 ...
- 用js写留言信息的判断非空条件
首先在tp上有多种方法去判断留言是否为空,但是js是最方便也是最没有冲突的. <form action="{:U('validate')}" method="pos ...
- asp.net MVC EF Where 过滤条件怎么写
做.Net开发的肯定都知道.Net Sql语句有个SqlParameter 一般用来做过滤判断逻辑写,那么到了EF 了还有这样的写法嘛?答案肯定是有的了,这里我只是把最粗糙和简单的写法罗列一些,具体封 ...
- 使用html进行浏览器判断,浏览器条件注释
下面来点今天写东西的时候查资料,收集的关于使用html进行浏览器判断的一些资料: 条件注释的基本格式: <!--[if expression]>注释内容<![endif]--> ...
- 腾讯一面问我SQL语句中where条件为什么写上1=1
目录 where后面加"1=1″还是不加 不用where 1=1 在多条件查询的困惑 使用where 1=1 的好处 使用where 1=1 的坏处 where后面加"1=1″还是 ...
- day04 if判断、while条件循环、for迭代器循环部分使用举例
一:if判断 1.成绩>=90,那么:优秀 如果成绩>=80且<90,那么:良好 如果成绩>=70且<80,那么:普通 其 ...
- 关于SQL语句条件值写中文查不到的问题
在使用jdbc链接MySQL执行SQL语句的时候,sql语句中的where条件,参数值带中文,则查询不到结果,而where条件,参数值都为数字或字母时可以正常查询, 原因是mysql的characte ...
随机推荐
- 003.ES2015和ES2016新特性--类.md
JavaScript使用的是基于原型的OO模型,用对象字面量或者函数来实例化对象,用原型链来实现继承. 这样对于数据传统C++.Java的OO范式的开发者来说,会感到比较困惑,于是从ES2015开始逐 ...
- ListView优化-ViewHolder缓存
安卓开发中ListView控件是一个使用频率相当的高级控件,通常用于展示一系列相似度极高的数据,当数据量极大或布局相当复杂时,ListView的性能优化就显得非常重要.所以在开发中不但功能上要满足,而 ...
- WebApp之H5登录注册
代码indexhtml <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...
- caffe(1) 网络结构层参数详解
prototxt文件是caffe的配置文件,用于保存CNN的网络结构和配置信息.prototxt文件有三种,分别是deploy.prototxt,train_val.prototxt和solver.p ...
- php数据类型及运算
数据类型: 标量类型: int(intege), float, string, bool 复合类型: array, object 特殊类型: null, resouce进制转换十进制转二进制decb ...
- BZOJ3744 Gty的妹子序列(分块+树状数组)
题意 询问区间内逆序对数 强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...
- Centos7(阿里云服务器)安装Anaconda的详细步骤与心得
在本地安装Anaconda的各个版本的文章已经很多,但是感觉不是很详细,因此,在此发发自己在Centos7(阿里云服务器)安装Anaconda的心得和步骤: 注:需要注意的地方会用不同颜色区别. 1. ...
- updatedb---创建或更新slocate命令所必需的数据库文件
updatedb命令用来创建或更新slocate命令所必需的数据库文件.updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中. 补 ...
- Java Web学习总结(20)——基于ZooKeeper的分布式session实现
1. 认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...
- COGS——T 1215. [Tyvj Aug11] 冗余电网
http://www.cogs.pro/cogs/problem/problem.php?pid=1215 ★ 输入文件:ugrid.in 输出文件:ugrid.out 简单对比时间限制: ...