1. 什么是freemark

      Freemaker是一个”模板引擎”,也可以说是一个基于模板技术的生成文本输出的一个通用工具

2.一般的用途:

l 能用来生成任意格式的文本:HTML,XML,RTF,JAVA源码,等等.

3.基本目标:代替以前的jsp显示页面

注意一般用freemarke来做哪些jsp页面:

1. 多查询页面

2.操作少的页面只是单纯的展示 比如新闻页面

3.访问量比较大的网站

优点 : 访问速度快 效率高

每次查询不进入数据库 缓解数据库压力

防止前台的高并发

JSP编译后的class代码的位置
D:\WorkspaceExam\six\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
 
而使用freemarker 则不用生成class文件 

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的更多相关文章

  1. EL表达式判断条件要写在${}内

    由于老没开发框架了,今天提取公共省市县三级联动组件时,使用jsp传参搞了半天才弄出来. 组件代码 $(function(){console.log("${param.init}") ...

  2. EXCEL应用:高级筛选里的条件或和与的条件怎么写 例:不包含,包含等

    ============================================================= a列包含b列,在c列中显示b列信息, =INDEX(B:B,MIN(IF(I ...

  3. if语句中同时判断多个条件的多种方法

    总结一下自己经常用到的python中的if语句同时判断多个条件的不同方法,假设有: x, y, z = 0, 1, 0 方法一,多个逻辑运算符一起使用,这也是最常用的写法: if x == 1 or ...

  4. If 条件左边写常量?

      if判断时,常量最好写左边 例如: 编程规范反复强调变量放在双等号的右边,常量放在左边,就是为了规避出现 If (ulCnt = 0)这种语法正确,但是极有可能是笔误的情况.为了杜绝这种不必要的逻 ...

  5. 用js写留言信息的判断非空条件

    首先在tp上有多种方法去判断留言是否为空,但是js是最方便也是最没有冲突的. <form action="{:U('validate')}" method="pos ...

  6. asp.net MVC EF Where 过滤条件怎么写

    做.Net开发的肯定都知道.Net Sql语句有个SqlParameter 一般用来做过滤判断逻辑写,那么到了EF 了还有这样的写法嘛?答案肯定是有的了,这里我只是把最粗糙和简单的写法罗列一些,具体封 ...

  7. 使用html进行浏览器判断,浏览器条件注释

    下面来点今天写东西的时候查资料,收集的关于使用html进行浏览器判断的一些资料: 条件注释的基本格式: <!--[if expression]>注释内容<![endif]--> ...

  8. 腾讯一面问我SQL语句中where条件为什么写上1=1

    目录 where后面加"1=1″还是不加 不用where 1=1 在多条件查询的困惑 使用where 1=1 的好处 使用where 1=1 的坏处 where后面加"1=1″还是 ...

  9. day04 if判断、while条件循环、for迭代器循环部分使用举例

    一:if判断 1.成绩>=90,那么:优秀         如果成绩>=80且<90,那么:良好         如果成绩>=70且<80,那么:普通         其 ...

  10. 关于SQL语句条件值写中文查不到的问题

    在使用jdbc链接MySQL执行SQL语句的时候,sql语句中的where条件,参数值带中文,则查询不到结果,而where条件,参数值都为数字或字母时可以正常查询, 原因是mysql的characte ...

随机推荐

  1. 第一性原理:First principle thinking是什么?

    作者:沧海桑田链接:https://www.zhihu.com/question/40550274/answer/225236964来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  2. appium使用教程(一 环境搭建)-------------2.安装部署

    1)      安装appium     2)      SDK(不建议使用模拟器,占用内存很大,会造成机器卡顿.另外模拟器还存在兼容性问题:pc为x86架构,绝大多数的手机都是ARM架构,app的兼 ...

  3. Hope is a good thing, maybe the best of things and no good thing ever dies !

  4. MYSQL8.0的安装方法

    1.下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/downloads/file/?id=476233,进入页面后可以不登录 ...

  5. kolla-ansible 安装openstack 拉取阿里云镜像时报错

     TASK [mariadb : Pulling mariadb image] ************************************************************ ...

  6. Linux GPT分区表16进制实例分析

    Linux GPT分区表16进制实例分析 GPT分区表随着win10的普及,已经在越来越多的新电脑上开始使用了.前段时间的新闻有看到说Intel会在后面的新平台中完全取消CSM支持,这也大概相当于后面 ...

  7. Spring-statemachine fork一个region后不能进入join状态的问题

    Spring-statemachine版本:当前最新的1.2.3.RELEASE版本 发现fork多个Region时,子状态全部完成后能够进入join状态.但是如果fork一个Region时Regio ...

  8. ArcGIS api for javascript——地图配置-

    描述 本例展示了如果删除缩放等级滑动器的刻度线.通过设置esriConfig里的sliderLabel为null来实现: esriConfig.defaults.map.sliderLabel = n ...

  9. [Poi] Build and Analyze Your JavaScript Bundles with Poi

    Ever wonder where those extra KB in your bundle are coming from? This lesson walks you through runni ...

  10. UINavigationBar的系统渲染方式

    昨天想手工实现一下类知乎日报的Navigation Bar的动态颜色改变,但不管怎么设置Navigation Bar的 backgroundColor barTintColor alpha參数都达不到 ...