freemarker的使用

freemarker与jsp,velocity并称java三大主要表现层技术.与jsp相比freemarker有以下优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言



原生态java项目下使用freemarker示例:
1.导入freemarker.jar包
2.servlet代码:

package com.ga.myAge.test;

import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class freemarkerServlet extends HttpServlet {

    // 负责管理FreeMarker模板的Configuration实例  
    private Configuration cfg = null;  
    public void init() throws ServletException {  
        // 创建一个FreeMarker实例  
        cfg = new Configuration();  
        // 指定FreeMarker模板文件的位置  
        cfg.setServletContextForTemplateLoading(getServletContext(),  "/WEB-INF/templates");  
    }  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 建立数据模型  
        Map<String,Object> map = new HashMap<String,Object>();  
        map.put("message", "hello world");  
        map.put("name", "张飞");  
        // 获取模板文件  
        Template t = cfg.getTemplate("test.ftl");  
        // 使用模板文件的Charset作为本页面的charset  
        // 使用text/html MIME-type  
        response.setContentType("text/html; charset=" + t.getEncoding());  
        Writer out = response.getWriter();  
        // 合并数据模型和模板,并将结果输出到out中  
        try {  
            t.process(map, out); // 往模板里写数据  
        } catch (TemplateException e) {  
            e.printStackTrace();  
        }  
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }   
}

3.模板文件

<html>  
  <head>  
        <title>freemarker测试</title>  
    </head>  
    <body>  
        <h1>${message},${name}</h1>  
    </body>  
</html>  

4.请求该servlet显示页面



但是大多数情况下我们使用框架进行项目开发,下面是ssm框架下的例子:
工具类:

package com.gda.goldenAge.test.utils;

import java.io.Writer;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig;

import freemarker.template.Template;


public class FreemarkerUtils {
    public static void tofreeMark(FreeMarkerConfig freeMarkerConfig,String fileName, Map<String,Object> map,HttpServletResponse response){
        try {  
            // 获取模板文件  
            Template t = freeMarkerConfig.getConfiguration().getTemplate(fileName);
            // 使用模板文件的Charset作为本页面的charset  
            // 使用text/html MIME-type  
            response.setContentType("text/html; charset=" + t.getEncoding());  
            Writer out = response.getWriter();  
            t.process(map, out); // 往模板里写数据  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }
}

controller层实现:

package com.gda.goldenAge.test.controller;

import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig;

import com.base.web.BaseAction;
import com.gda.goldenAge.test.entity.Student;
import com.gda.goldenAge.test.utils.Constant;
import com.gda.goldenAge.test.utils.FreeMarkerUtil;
import com.gda.goldenAge.test.utils.FreemarkerUtils;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

@Controller
@RequestMapping("/freeMarker")
public class FreemarkerTestController extends BaseAction {
    private final static Logger log= Logger.getLogger(FreemarkerTestController.class);

    @Autowired
    private FreeMarkerConfig freeMarkerConfig;//获取FreemarkerConfig的实例
    @RequestMapping("/test5")
    public void test5(HttpServletRequest request,HttpServletResponse response){

        //当前日期
        Date date = new Date();

        //一个学生对象
        Student stu = new Student("张飞", 15, "男", "打灰机", "500");     

        Map<String, Object> map = new HashMap<String,Object>();
        map.put("message", "Hello");
        map.put("user", "李小白先生");
        map.put("num", 22);
        map.put("date", date);

        map.put("booleanValue", true);
        map.put("xiaoshu", 2.5689);

        map.put("stu", stu);        
        String fileName = "freemarkTest.ftl";
        FreemarkerUtils.tofreeMark(freeMarkerConfig, fileName, map, response);
    }
}

测试用的实体类

package com.gda.goldenAge.test.entity;

public class Student {
    private String name;
    private int age;
    private String gender;
    private String hobby;
    private String strength;
    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;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getStrength() {
        return strength;
    }
    public void setStrength(String strength) {
        this.strength = strength;
    }
    public Student(String name, int age, String gender, String hobby,
            String strength) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.hobby = hobby;
        this.strength = strength;
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }   
}

模板文件

<html>  
  <head>  
        <title>freemarker测试</title>  
    </head>  
    <body>
        <#setting locale=zh-cn>

        <#--文本部分-->
        <h1>这是一个freemarker的测试混搭</h1>
        <#--插值--> 
        <h1>${message},${user}</h1>  

        <#-- 数字格式化插值 -->
        <h1>#{num}</h1>

        <#-- 使用FTL指令 -->

        <#-- 一组数字 -->
        <hr/>
        <h4>一组数字</h4>
        ${num}<br>
        ${num?string} <#-- the same as ${answer} --> <br>
        ${num?string.number} <br>
        ${num?string.currency} <br>
        ${num?string.percent} <br>

        <#-- 一组日期 -->
        <hr/>
        <h4>一组日期</h4>
        ${date?date}<br>
        ${date?time}<br>
        ${date?datetime}<br>
        ${date?string("yyyy-MM-dd HH:mm:ss zzzz")} <br>
        ${date?string("EEE, MMM d, ''yy")} <br>
        ${date?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")} <br>

        <hr/>
        <h4>布尔值</h4>
        ${booleanValue?string("yes", "no")}

        <hr/>
        <h4>小数</h4>
        #{xiaoshu; M2} <br>
        #{xiaoshu; M2} <br>
        #{xiaoshu; m2} <br>
        #{xiaoshu; m2} <br> 
        #{xiaoshu; m1M2}<br>
        #{xiaoshu; m1M2} <br>

        <hr/>
        <h4>对象</h4>
        ${stu}<br>
        ${stu?string}<br>
        ${stu.name+stu.age}<br>
        ${stu.name?string}<br>
        ${stu.age*2}<br>

        <hr/>
        <h4>集合</h4>
        <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x> 
            ${x} <br>

        </#list> 
        <br>
        <#list [2 + 2, [1, 2, 3, 4], "whatnot"]  as y> 
            ${y} 
        </#list> 
        <br>
        <#list 5..2  as z> 
            ${z} 
        </#list> 

        <hr/>
        <h4>map集合</h4>

        <hr/>
        <h4>简单指令</h4>
        <#setting locale="en">

        <hr/>
        <h4>HTML组件</h4>
        <input type="button" id="bt1" style="height:50px";
        value="I`m a button" onclick="alert('你是一个button')" />        
    </body>  
</html>  

输出效果

当然还需要freemarker.jar包和配置文件的支持啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值