FreeMarker Demo

Stella981
• 阅读 804

Freemarker是一款模板引擎。

模板 + 数据模型 = 输出

  FreeMarker Demo

从上图不难看出FreeMarker就是将数据模型中的值填充到模板文件中指定的插值处,最后将填充后的文本形式输出。

使用FreeMarker将数据模型中的值合并到模板文件中,一般有以下步骤:
1、创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生产模板实例。
2、使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。
3、填充数据模型,数据模型一般就是一个Map对象。
4、调用Template实例的process()方法完成合并。

**在Java中使用FreeMarker
FreeMarker Demo
**
FreeMarkerTest.java

public class FreeMarkerTest {

    private Configuration cfg = null;
    
    public static void main(String[] args) throws Exception {
        FreeMarkerTest maker = new FreeMarkerTest();
        maker.init();
        maker.process();
    }
    
    //初始化工作
    public void init() throws Exception {
        cfg = new Configuration();
        //设置模板文件位置
        cfg.setDirectoryForTemplateLoading(new File("src/template"));
    }
    
    //模板 + 数据模型 = 输出
    public void process() throws Exception {
        //创建数据模型
        Map<String, String> rootMap = new HashMap<String, String>();
        rootMap.put("name", "FreeMarker");
        rootMap.put("message", "FreeMarker For Java Project");
        
        //使用Configuration实例加载指定模板
        Template template = cfg.getTemplate("user.ftl");
        //合并处理(模板 + 数据模型)
        template.process(rootMap, new OutputStreamWriter(System.out));
    }
}

创建的Map对象rootMap作为模板文件的数据模型,该数据模型中的两个Value值会填充到模板(user.ftl)中对应key值的插值处。

user.ftl

${name}, ${message}

Console

FreeMarker, FreeMarker For Java Project

**在Java Web中使用FreeMarker

**大部分时候FreeMarker都用于在Web应用中生成HTML页面。
FreeMarker Demo

FreeMarkerServlet.java

public class FreeMarkerServlet extends HttpServlet {

    private Configuration cfg = null;
    
    public void init() throws ServletException {
        cfg = new Configuration();
        //设置模板文件位置
        cfg.setServletContextForTemplateLoading(getServletContext(), "/template");
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        //建立数据模型
        Map<String, String> rootMap = new HashMap<String, String>();
        rootMap.put("name", "FreeMarker模板");
        rootMap.put("message", "FreeMarker For JavaWeb");
        
        try {
            //取得模板文件
            Template template = cfg.getTemplate("hello.ftl");
            response.setContentType("text/html; charset=utf-8 ");
            Writer out = response.getWriter();
            //合并数据模型和模板,并将结果输出到response.getWriter()中
            template.process(rootMap, out);
        }catch(IOException e) {
            e.printStackTrace();
        }catch(TemplateException t) {
            t.printStackTrace();
        }
    }
}

hello.ftl

<html>
    <head>
        <title>FreeMarker For JavaWeb</title>
    </head>
    <body>
        <h1 style = "color:blue">${name}</h1>
        <h1 style = "color:red">${message}</h1>
    </body>
</html>

访问 http://localhost:8080/FreeMarkerForJavaWeb/FreeMarkerServlet结果页面:
FreeMarker Demo

这两个示例的不同之处在于Servlet中加载模板的方法是setServletContextForTemplateLoading(Object o, String s),该方法的第一个参数是本应用的ServletContext实例,第二个参数是模板文件所在的路径。

**在Struts2中使用FreeMarker

FreeMarker Demo
**

index.jsp

<body>
    <h1>Register Information</h1>
    <s:form action="login" method="post">
        <s:label value="username" />
        <!-- name属性和Action中的字段名一致 -->
        <s:textfield id="username" name="name" />
        <s:label value="password" />
        <s:password id="password" name="pwd" />
        <s:label value="age" />
        <s:textfield id="age" name="age" />
        <s:label value="register" />
        <s:textfield id="register" name="registerDate" />
        <s:submit value="submit" />
    </s:form>
    <hr>
  </body>

LoginAction.java

public class LoginAction extends ActionSupport {
    private String name;
    private String pwd;
    private int age;
    private Date registerDate;




    
         省略getter、setter

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
}

struts.xml

<struts>
    <package name="FreeMarker For Struts2" extends="struts-default">
        <action name="login" class="cn.struts2.action.LoginAction">
            <result type="freemarker">/WEB-INF/templates/userlist.ftl</result>
        </action>
    </package>
</struts>

userlist.ftl

<html>
    <head>
    </head>
    <body>
        用户名:${name} <br>
        密码:${pwd} <br>
        年龄:${age} <br>
        注册日期:${registerDate} <br>
    </body>
</html>

通过 http://localhost:8080/FreeMarkerForStruts2/index.jsp访问
FreeMarker Demo

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
springboot2.0结合freemarker生成静态化页面
\TOC\使用freemarker将页面生成html文件,本节测试html文件生成的方法:1、使用模板文件静态化定义模板文件,使用freemarker静态化程序生成html文件。2、使用模板字符串静态化定义模板字符串,使用freemarker静态化程序生成html文件。1\.pom.xml
Stella981 Stella981
3年前
SpringBoot获取Freemarker模板引擎,生成HTML代码
今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块1.新建Freemarker模板<liid"${comment.oId}"<div<divclass"avatartooltippedtooltippedn"ariala
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Thymeleaf实用实例
1\.简介之前一直使用Freemarker,对Thymeleaf了解但是不熟悉,最近因为其他项目组他们要快速搭建后台,使用了一个三方的框架用到了Thymeleaf,所以进一步了解了一些。发现Thymeleaf更加像前端的模板语言,所以对静态页面有更好的兼容性,就是,如果是Freemarker模板文件,浏览器是解析不了的,会直接出错。而
Stella981 Stella981
3年前
Freemark(一): 简介及其使用
1\.Freemark简介FreeMarker是一款模板引擎:一种基于魔板的、用来生成输出文本的通用工具。类似模板引擎还有Velocity,CommonTemplate等。对于javaweb开发来说,使用FreeMarker模板,可以将java代码从页面中分离出来。开发人员只需关注业务逻辑代码,而由页面设计人员去设
Easter79 Easter79
3年前
SpringBoot获取Freemarker模板引擎,生成HTML代码
今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块1.新建Freemarker模板<liid"${comment.oId}"<div<divclass"avatartooltippedtooltippedn"ariala
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这