`
wrong1111
  • 浏览: 252436 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

freemarker 学习

阅读更多

FreeMarker 练习

1.建立java工程

2.建立JAVA包,存放模版文件.ftl文件夹templates ,及存放生成.shtml文件夹shtmls

3.在templates文件夹下建一个1.ftl文件。内容如下。

 <html>
<head>

<title>${person.description} </title>
</head>

<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr><td>
  hello!${person.name}</br>
  now date is:${person.nowTime?string('yyyy-MM-dd hh:mm:ss')}</br>
  your age is:${person.age}</br>
  用户定义指令:</br>
  <#macro greet person>
    <font size="2">Hello! ${person}!</font>
  </#macro>
 
  <@greet person="wyong"></@greet>
    </td>

</tr>
</table>
</body>

</html>
 



4.建立需要输入的VO对象。Person 类
内容如下 :

package com.example.demo;

import java.util.Date;

public class Person {
    private String name;

    private Date nowTime;

    private String age;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getNowTime() {
        return nowTime;
    }

    public void setNowTime(Date nowTime) {
        this.nowTime = nowTime;
    }

}
 



5。导入所用模版引擎的freemarker2.3.13的jar包。

6.建立处理模版类 Demo

 内容如下:

package com.example.demo;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

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

public class Demo {
    private Configuration freemarker_cfg = null;

    /**
     * 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
     *
     * @throws IOException
     */
    protected Configuration getFreeMarkerCFG() throws IOException {
        if (null == freemarker_cfg) {
            // Initialize the FreeMarker configuration;
            // - Create a configuration instance
            freemarker_cfg = new Configuration();

            // - FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:路径,根据Servlet上下文,classpath等等

            // htmlskin是放在classpath下的一个目录
            // freemarker_cfg.setClassForTemplateLoading(this.getClass(),
            // "/htmlskin");
            // 调用文件系统中的路径 模版文件.ftl 的根目录.
            freemarker_cfg.setDirectoryForTemplateLoading(new File(
                    "E://space5.5//FreeMarkerDemo//templates"));
        }

        return freemarker_cfg;
    }

    /**
     * 生成静态文件.
     *
     * @param templateFileName
     *            模板文件名,相对templates路径,例如"/templates/1.ftl"
     * @param propMap
     *            用于处理模板的属性Object映射
     * @param htmlFilePath
     *            要生成的静态文件的路径,相对设置中的根路径,例如 "/shtmls/1/2005/4/"
     * @param htmlFileName
     *            要生成的文件名,例如 "1.htm"
     */
    public boolean geneHtmlFile(String templateFileName, Map propMap,
            String htmlFilePath, String htmlFileName) {
        // @todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用
        String sRootDir = "E:/space5.5/FreeMarkerDemo/shtmls";

        try {
            String prefix = templateFileName.substring(0, templateFileName
                    .indexOf("."));
            Template t = getFreeMarkerCFG().getTemplate(templateFileName);
            java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
                    "yyyyMMddHHmmss");
            htmlFileName = prefix + "_" + sdf.format(new java.util.Date())
                    + "_" + Math.round(Math.random() * 100) + htmlFileName;

            // 如果根路径存在,则递归创建子目录
            creatDirs(sRootDir, htmlFilePath);

            File afile = new File(sRootDir + "/" + htmlFilePath + "/"
                    + htmlFileName);

            Writer out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(afile)));

            t.process(propMap, out);
        } catch (TemplateException e) {
            System.out.println("Error while processing FreeMarker template "
                    + templateFileName + " \n" + e);
            return false;
        } catch (IOException e) {
            System.out.println("Error while generate Static Html File "
                    + htmlFileName + "\n " + e);
            return false;
        }

        return true;
    }

    /**
     * 创建多级目录
     *
     * @param aParentDir
     *            String
     * @param aSubDir
     *            以 / 开头
     * @return boolean 是否成功
     */
    public static boolean creatDirs(String aParentDir, String aSubDir) {
        File aFile = new File(aParentDir);
        if (aFile.exists()) {
            File aSubFile = new File(aParentDir + aSubDir);
            if (!aSubFile.exists()) {
                return aSubFile.mkdirs();
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    /**
     * 2008-5-19 author :wangyong
     *
     * @param args
     *
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person person = new Person();
        person.setAge("22");
        person.setName("Jacke");
        person.setNowTime(new java.util.Date());
        person.setDescription("这是第一次使用freemarker测试!");
       
        Demo test = new Demo();

        Map root = new HashMap();
        root.put("person", person);//把此时的vo对象person放到map中,传值

        String sGeneFilePath = "/example/";

        String sFileName = ".htm";//生成的文件后缀名

        boolean bOK = test.geneHtmlFile("1.ftl", root, sGeneFilePath,
                sFileName);
    }

}
 



运行此程序,可以在工程目录的shtmls/example/下看到生成的一个根据日期时间生成的.htm文件。

分享到:
评论
4 楼 xiaoLee 2011-10-13  
不错的example
3 楼 fpplzw 2008-11-26  
发现个好东西
2 楼 wrong1111 2008-11-23  
希望对你有所帮助。。。

1 楼 tkl211 2008-11-10  
谢谢,鼓捣一晚上,也没搞出来...终于找到一个例子了.. 汗!!

相关推荐

    电动车上牌管理系统 SSM毕业设计 附带论文.zip

    电动车上牌管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    【eclipse和idea两个版本运行源码】基于Java Swing +mysql 实现的网吧管理系统

    一、项目简介 本项目是一套基于Java Swing 开发的网吧管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 二、技术实现 ​后台技术:java swing ​数据库:MySQL ​数据库连接池:c3p0 三、系统主要功能 用户登录: 分为 普通用户和管理员 两种角色 菜单模块:上机,下机, 系统设置:管理员设置,会员设置,计费设置, 退出系统 管理模块:增加会员,删除会员,信息修改,信息查询 视图模块:主页视图,在线用户,统计视图, 统计报表模块:人数报表,收入报表 帮助模块:联系我们,关于系统 详见:https://blog.csdn.net/weixin_43860634/article/details/125247764

    pc-dmis软件脚本-输出Excel格式报告

    使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能

    【java毕业设计】校园失物招领系统源码(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

    基于java的网上电子书店h答辩PPT.pptx

    基于java的网上电子书店h答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    pandas-2.1.4-cp39-cp39-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    判断题 - 题目列表 - 图-练习题集飒飒阿萨

    springboot体育器材管理系统(附源码+数据库)71175

    管理员功能: 用户管理:管理员可以管理用户账户,包括审核新注册用户、禁用违规用户、重置密码等操作。 器材管理:管理员可以管理器材的信息,包括添加新器材、编辑器材详情、设定器材规则和限制等。 器材预约与借还管理:管理员可以处理用户的器材预约请求,确认或调整预约时间,并记录借还操作。 库存管理:管理员可以监控器材库存情况,及时补充不足的器材并处理损坏或报废的器材。 数据统计与报表:管理员可以分析系统的使用情况和借还记录,生成数据统计报表以了解器材使用情况和借还频率等。 系统设置与维护:管理员可以进行系统设置,包括配置器材规则、设定可用时间段、备份数据、优化系统性能等。 消息通知与提醒:管理员可以向用户发送消息通知,如器材预约成功、归还提醒、系统更新通知等。

    Jira插件安装包Dynamic-forms

    Jira插件安装包Dynamic-forms

    pandas-2.1.4-cp311-cp311-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    少儿图形化scratch编程作品源码集100个

    Scratch是一款由麻省理工学院(MIT)的“终身幼儿园团队”开发的图形化编程工具,专为儿童设计,旨在帮助他们学习编程思维和逻辑能力。

    基于java的学生就业管理系统答辩PPT.pptx

    基于java的学生就业管理系统答辩PPT.pptx

    课设毕设基于SpringBoot+Vue的旅游门票信息系统设计与实现源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

    大学志愿填报系统.zip

    随着社会对志愿服务活动的日益重视,各大高校也纷纷参与到志愿服务的行列中。为了更好地管理和记录志愿者活动,提高志愿服务的质量和效率,我们开发了这款大学志愿服务系统。 该系统主要包括多个功能模块,如信息管理、活动管理、学生管理等。信息管理模块允许学校管理员录入、修改和删除学校的基本信息,包括学校账号、名称、联系电话、地址、特色以及办学理念等,确保信息的准确性和完整性。活动管理模块则用于记录和管理志愿者活动的相关信息,包括活动的名称、时间、地点、参与人员等,方便志愿者进行报名和签到。 此外,系统还提供了学生管理模块,用于记录学生的志愿服务经历和表现,为学生参与志愿服务提供便利。同时,系统还支持照片上传和展示功能,通过展示志愿者活动的照片,让更多人了解和关注志愿服务事业。 整个系统界面简洁明了,操作便捷,功能强大。通过使用该系统,高校可以更加高效地管理和记录志愿者活动,提高志愿服务的整体水平。同时,该系统也为广大志愿者提供了一个展示自我、服务社会的平台。

    turbo均衡算法研究

    turbo均衡算法研究

    静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) part01

    https://blog.csdn.net/aggs1990/article/details/143491823 静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) 压缩包比较大,这是第一部分

    tornado-6.4b1-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4b1-cp38-abi3-musllinux_1_1_i686.whl

Global site tag (gtag.js) - Google Analytics