码迷,mamicode.com
首页 > 其他好文 > 详细

Free 基础概念

时间:2016-12-17 14:04:07      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:stack   code   使用   project   tput   cat   服务   目的   环境   

一、概述

FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由FreeMarker 生成页面,通过模板显示准备的数据(如下图)

技术分享

FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件。FreeMarker 与容器无关,因为它并不知道 HTTP 或 Servlet;FreeMarker 同样可以应用于非Web应用程序环境,FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板中使用 JSP标记库。另外,FreeMarker是免费的。

二、Freemarker的准备条件

    freemarker.2.3.16.jar,下载地址这里就不贴了..(这个jar包其实在struts2里面)


三、Freemarker生成静态页面的原理

    Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。

四、Freemarker提供的标签,目前只需要知道这几个

Freemarker提供了很多有用 常用的标签,Freemarker标签都是<#标签名称>这样子命名的,${value} 表示输出变量名的内容 ,具体如下:

1、list:该标签主要是进行迭代服务器端传递过来的List集合,比如:

<#list nameList as names> 
 ${names} 
</#list>

name是list循环的时候取的一个循环变量,freemarker在解析list标签的时候,等价于:

for (String names : nameList) { 
  System.out.println(names); 
} 

 

2、if:该标签主要是做if判断用的,比如:

<#if (names=="陈靖仇")> 
 他的武器是: 十五~~ 
</#if> 

 

这个是条件判断标签,要注意的是条件等式必须用括号括起来, 等价于:

if(names.equals("陈靖仇")){ 
  System.out.println("他的武器是: 十五~~"); 
} 


3、include:该标签用于导入文件用的

<#include "include.html"/> 

这个导入标签非常好用,特别是页面的重用。

另外在静态文件中可以使用${} 获取值,取值方式和el表达式一样,非常方便。

 

下面举个例子(static.html):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
  
描述:${description} 
<br/> 
集合大小:${nameList?size} 
<br/> 
迭代list集合: 
<br/> 
<#list nameList as names> 
这是第${names_index+1}个人,叫做:<label style="color:red">${names}</label> 
if判断: 
<br/> 
<#if (names=="陈靖仇")> 
 他的武器是: 十五~~ 
<#elseif (names=="宇文拓")>    <#--注意这里没有返回而是在最后面-->  
 他的武器是: 轩辕剑~· 
<#else> 
她的绝招是:蛊毒~~ 
</#if> 
<br/> 
</#list> 
迭代map集合: 
<br/> 
<#list weaponMap?keys as key> 
key--->${key}<br/> 
value----->${weaponMap[key]!("null")} 
<#--  
fremarker 不支持null, 可以用! 来代替为空的值。 
其实也可以给一个默认值  
value-----${weaponMap[key]?default("null")} 
还可以 在输出前判断是否为null 
<#if weaponMap[key]??></#if>都可以 
--> 
  
<br/> 
</#list> 
include导入文件: 
<br/> 
<#include "include.html"/> 
  
</body> 
</html> 

实际代码:

package com.chenghui.test; 
  
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.Writer; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
  
import freemarker.template.Configuration; 
import freemarker.template.DefaultObjectWrapper; 
import freemarker.template.Template; 
import freemarker.template.TemplateException; 
  
public class CreateHtml { 
  public static void main(String[] args) { 
    try { 
      //创建一个合适的Configration对象 
      Configuration configuration = new Configuration(); 
      configuration.setDirectoryForTemplateLoading(new File("D:\\project\\webProject\\WebContent\\WEB-INF\\template")); 
      configuration.setObjectWrapper(new DefaultObjectWrapper()); 
      configuration.setDefaultEncoding("UTF-8");  //这个一定要设置,不然在生成的页面中 会乱码 
      //获取或创建一个模版。 
      Template template = configuration.getTemplate("static.html"); 
      Map<String, Object> paramMap = new HashMap<String, Object>(); 
      paramMap.put("description", "我正在学习使用Freemarker生成静态文件!"); 
        
      List<String> nameList = new ArrayList<String>(); 
      nameList.add("陈靖仇"); 
      nameList.add("玉儿"); 
      nameList.add("宇文拓"); 
      paramMap.put("nameList", nameList); 
        
      Map<String, Object> weaponMap = new HashMap<String, Object>(); 
      weaponMap.put("first", "轩辕剑"); 
      weaponMap.put("second", "崆峒印"); 
      weaponMap.put("third", "女娲石"); 
      weaponMap.put("fourth", "神农鼎"); 
      weaponMap.put("fifth", "伏羲琴"); 
      weaponMap.put("sixth", "昆仑镜"); 
      weaponMap.put("seventh", null); 
      paramMap.put("weaponMap", weaponMap); 
        
      Writer writer = new OutputStreamWriter(new FileOutputStream("success.html"),"UTF-8"); 
      template.process(paramMap, writer); 
        
      System.out.println("恭喜,生成成功~~"); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } catch (TemplateException e) { 
      e.printStackTrace(); 
    } 
      
  } 
} 

五、Freemarker自定义标签 

下次再看

 

Free 基础概念

标签:stack   code   使用   project   tput   cat   服务   目的   环境   

原文地址:http://www.cnblogs.com/maanshancss/p/6189301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!