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. java9新特性-20-Javascript引擎升级:Nashorn

    1.官方Feature 236: Parser API for Nashorn 292: Implement Selected ECMAScript 6 Features in Nashorn 2.使 ...

  2. java中"".equals(A)与A.equals("")一样不?

    不一样如果a为nulla = null;a.equals("")出错nullPointerException如果写为"".equals(a)-->就可以防 ...

  3. 三分钟明白 Activiti工作流 -- java运用_转载

    一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...

  4. Linux/Mac vi命令详解

    刚开始学着用Linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...

  5. php八大设计模式之策略模式

    策略模式提供一个虚拟的整体,根据不同的要求(参数)提供不同的"零件"(调用不同的"零件"实现不同的结果). <?php /** * 策略模式 * 跟工厂模 ...

  6. [转载]-win7启动本地MongoDB的四种方式

    2016年04月07日 09:52:34 cherry__cheng 阅读数:19451 标签: win7启动本地MongoDB的四种方式快速启动本地mongodb 更多 个人分类: mongodb& ...

  7. java 线程传参 方式

    第一类:主动向线程传参   public class ThreadTest extends Thread { public ThreadTest() { } /** * 第一种通过构造方法来传递参数 ...

  8. 【Henu ACM Round#16 E】Paths and Trees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 感觉很像一道最短路. 然后就试了一发. 结果真的是.. 只要用一个优先队列优化的dijkstra算法求出每个点的最短路上的前一个点是 ...

  9. Python(十一) 原生爬虫

    一.分析抓取目的确定抓取页面   #爬取主播人气排行 二.整理爬虫常规思路   爬虫前奏 明确目的 找到数据对应的网页 分析网页的结构找到数据所在的标签位置 模拟 HTTP 请求, 向服务器发送这个请 ...

  10. 学习思考:思考>努力

    学.习.思.考 学习.思考,这2个词,4个字,其实代表了4个不同的动作:学.习.思.考. 学,就是从外部(他人)获得. 习,就是练习,行动. 思,就是从内部(自己)获得. 考,就是考量,检测. 因此, ...