`
lxy19791111
  • 浏览: 481603 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

访问FreeMarker的工具类

    博客分类:
  • Java
阅读更多
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;

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

/**
 * 访问FreeMarker的工具类
 * @author xiangyang.li
 *
 */
public class FreeMarkerUtils {
	
	private static final Logger LOG = Logger.getLogger(FreeMarkerUtils.class);
    
    /** 是否已初始化 */
    private static boolean isInit = false;
    
    /** 应用所在路径 */
    private static String appPath = null;
    
    /** 编码格式 UTF-8 */
    private static final String ENCODING = "UTF-8";

    /** FreeMarker配置 */
    private static Configuration config = new Configuration();
    
    /** 路径分割符 */
    public static final String PATH_SEPARATOR = "/";
    
    /**
     * 初始化FreeMarker配置
     * @param applicationPath 应用所在路径
     */
    public static void initFreeMarker(String applicationPath) {
        if (!(isInit)) {
            try {
                appPath = applicationPath;
                // 加载模版
                File file = new File(new StringBuffer(appPath).append(File.separator).toString());
                // 设置要解析的模板所在的目录,并加载模板文件
                config.setDirectoryForTemplateLoading(file);
                // 设置文件编码为UTF-8
                config.setEncoding(Locale.getDefault(), ENCODING);
                isInit = true;
            } catch (IOException e) {
            	LOG.error("初始化FreeMarker配置出错", e);
            }
        }
    }

    /**
     * 据数据及模板生成文件
     * 
     * @param data
     *            一个Map的数据结果集
     * @param templateFileName
     *            ftl模版路径(已默认为WEB-INF/templates,文件名相对此路径) 
     * @param outFileName
     *            生成文件名称(可带路径)
     * @param isAbsPath
     *            是否绝对路径
     */
    public static void crateFile(Map<String, Object> data, String templateFileName, String outFileName, boolean isAbsPath) {
    	if(!isInit){
    		System.out.println("FreeMarker模板引擎未初始化,请确认已经调用initFreeMarker()方法对其进行了初始化");
    	}
        Writer out = null;
        try {
            // 获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
            Template template = config.getTemplate(templateFileName, ENCODING);
            template.setEncoding(ENCODING);
            
            // 生成文件路径
            // 如果是绝对路径则直接使用
            if(isAbsPath){
            	outFileName = new StringBuffer(outFileName).toString();
            } else{
            	// 相对路径则使用默认的appPath加上输入的文件路径
            	outFileName = new StringBuffer(appPath).append(File.separator).append(outFileName).toString();
            }
            String outPath = outFileName.substring(0, outFileName.lastIndexOf(PATH_SEPARATOR));
            // 创建文件目录
            FileUtils.forceMkdir(new File(outPath));
            File outFile = new File(outFileName);
            out = new OutputStreamWriter(new FileOutputStream(outFile), ENCODING);
            
            // 处理模版
            template.process(data, out);
            
            out.flush();
            LOG.info("由模板文件" + templateFileName + "生成" + outFileName + "成功.");
        } catch (Exception e) {
        	LOG.error("由模板文件" + templateFileName + "生成" + outFileName + "出错.", e);
        } finally{
            try {
            	if(out != null){
            		out.close();
            	}
            } catch (IOException e) {
            	LOG.error("关闭Write对象出错", e);
            }
        }
    }

}

 

// 初始化模板引擎
FreeMarkerUtils.initFreeMarker("D:/");
/** 模板引擎所需要的数据Map */
Map<String,Object> templateData = new HashMap<String, Object>();
List<String> cityList = new ArrayList<String>();
cityList.add("深圳");
templateData.put("cityList",cityList);
// 生成js文件
FreeMarkerUtils.crateFile(templateData, "templates/city.flight.ftl", "js/city.flight.js", false);

 

分享到:
评论

相关推荐

    spring boot + mybaits +freemarker +maven 架构来袭 注解版

    综上所述,这个项目利用Spring Boot的便捷性,MyBatis的数据访问能力,FreeMarker的视图渲染功能,以及Maven的项目构建和管理,构建了一个高效、易维护的Web应用程序。这样的架构设计能够帮助开发者快速搭建项目,...

    springmvc+mybatis 和一个简单的freemarker代码生成工具

    在实际项目中,一个简单的代码生成工具可能会利用SpringMVC和MyBatis的组合,通过用户输入的表结构信息,自动生成对应的实体类、Mapper接口、Mapper XML文件以及FreeMarker模板。这样的工具可以极大地提高开发效率,...

    freemarker导出Word和pdf工具类

    本篇文章将深入讲解如何使用FreeMarker来导出Word和PDF文件,并介绍相关工具类的实现。 首先,我们需要理解FreeMarker的工作原理。FreeMarker是一个基于模板的生成器,它通过读取模板文件和数据模型,然后将两者...

    Velocity 和 FreeMarker区别

    主要原因是FreeMarker内置了更多的功能,例如自动转义机制、丰富的内置函数等,这使得开发者无需额外编写工具类或方法即可完成许多常见的任务。而使用**Velocity**时,为了达到类似的效果,则可能需要开发者自己编写...

    freemarker wrod 统计图的生成

    Java的`freemarker.template.Configuration`类可以帮助你完成这个任务。 ### 二、直接将图片64编码放入Word文档 1. **图片转64编码**: 图片可以被转换成Base64编码字符串,这允许我们直接将图片数据嵌入到文档的...

    freemarker.jar用于jdk1.8下使用

    3. **模板处理**:Freemarker的`Template`类负责解析模板文件并生成最终输出。你通常会先加载模板文件,然后用`Template`的`process`方法传入数据模型,得到生成的文本。 4. **内置函数和指令**:Freemarker提供了...

    springboot如何使用Freemarker模版引擎

    - 运行SpringBoot应用,访问`http://localhost:8080/index`,浏览器将显示Freemarker模板渲染后的结果。 通过以上步骤,你可以在SpringBoot应用中成功集成并使用Freemarker模板引擎。这只是一个基础的介绍,实际...

    SSH框架常用到的一些工具类整理

    在这个“SSH框架常用到的一些工具类整理”中,我们将探讨SSH框架下的一些关键工具类及其应用,这些工具类对于进行SSH开发至关重要。 首先,让我们关注Spring框架。Spring框架提供了一系列工具类,如`BeanUtils`,...

    SSH项目 有Freemarker模版

    综上所述,这个SSH项目结合了Freemarker模板技术,使得前端展示更加灵活,同时利用Spring和Hibernate实现了业务逻辑与数据访问的解耦。尽管原项目中包含了Maven,但在某个阶段进行了精简,可能意味着项目采用了更...

    SpringBoot+JPA+Freemarker 生成动态SQL

    在IT行业中,SpringBoot、JPA(Java Persistence API)和Freemarker是常见的开发工具和技术,它们在构建高效、灵活的Web应用时发挥着重要作用。本篇将详细讲解如何利用这些技术来生成动态SQL。 首先,SpringBoot是...

    FreeMarker模板语言API

    在Android Studio(AS)中,FreeMarker API可以作为构建动态内容的有效工具。 FreeMarker的核心概念包括数据模型、模板和输出。数据模型是由程序提供的,包含了所有要在模板中显示的数据。模板是包含FreeMarker指令...

    如何使用Freemarker生成java代码

    总结,Freemarker是一个强大且灵活的工具,通过合理的数据模型设计和模板编写,可以方便地生成各种Java代码,极大地提高了开发效率。正确理解和运用Freemarker,将使你在代码生成任务上事半功倍。

    httpclient,freemarker的静态化分页

    使用这些工具类,开发者可以快速实现静态化分页,降低服务器压力,提高页面加载速度,提升用户体验。 总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态...

    基于Freemarker代码生成程序

    在本项目中,Freemarker被用来生成Java源代码,这些代码通常包括实体类(Entity)、数据访问对象(DAO)、服务接口(Service Interface)和服务实现(Service Implementation)等,它们与数据库表一一对应。...

    freemarker+ssm+maven整合.rar

    8. **优化与扩展**:在实际项目中,还可以考虑引入Spring Boot简化配置,使用Thymeleaf或Velocity替代Freemarker,或者采用Spring Data JPA等高级技术进行数据访问。 以上就是"freemarker+ssm+maven整合"项目的主要...

    struts2中使用freeMarker

    - 将Action中的属性暴露给FreeMarker模板,通常是通过getter方法,FreeMarker可以访问这些属性并展示在页面上。 4. **结果类型配置**: - 在Action配置中,定义一个结果类型为`dispatcher`的结果,指定对应的...

    FreeMarker入门指南API文档(中文版)

    1. **Template**: 这是FreeMarker的核心类,代表一个模板文件。你可以通过`TemplateLoader`加载模板,然后使用`process`方法将数据模型与模板合并。 2. **Configuration**: 用于配置FreeMarker的行为,如设置模板...

    freemarker项目(从入门到与struts2结合)

    1. **安装与配置**:FreeMarker是一个轻量级库,可以通过Maven或Gradle等构建工具引入到Java项目中。配置主要涉及设置模板目录和配置文件`freemarker.properties`,其中定义了FreeMarker的行为,例如模板的缓存策略...

Global site tag (gtag.js) - Google Analytics