`

访问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);

 

分享到:
评论

相关推荐

    mybatis-freemarker-generator

    一款mybatis基本CRUD从java代码到mapper.xml配置的生成工具所有的用户设置都集中在mybatis-freemarker-example/resources/application.properties配置文件中实现功能根据用户给定的实体类生成对应的业务代码 (Done)...

    非常好的mybatisplus项目资源,分享出来.zip

    ├── datasources -- 多数据源工具类 │ ├── shiro -- Shiro验证框架 │ ├── task -- Quartz定时任务 │ ├── util -- 工具类 | ├── FreeMarker -- 自定义FreeMarker标签 │ ├── resources | ├──...

    SpringBoot集成MyBatisPlus

    ├── datasources -- 多数据源工具类 │ ├── shiro -- Shiro验证框架 │ ├── task -- Quartz定时任务 │ ├── util -- 工具类 | ├── FreeMarker -- 自定义FreeMarker标签 │ ├── resources | ├──...

    毕业设计:基于JAVA的SSM+Freemarker框架的CRM智能办公系统

    CRM-智能办公系统前端基于LayUI框架和Freemarker技术开发,后端基于Java技术以及SSM框架开发,前后端数据通过Ajax交互,数据库采用MySQL,开发工具为IDEA,使用B/S模式开发。本系统为B to C类型的操作性CRM系统,系统...

    基于springboot+MyBatis等技术的JavaWeb项目实现的房产项目

    Guava Cache(java工具类集的基础库,注册key的绑定) Druid(监控目的的数据库连接池),配置文件里面加密数据库密码 Freemarker:基于Java的生成html的模板引擎,用来前后端交互 Nginx:反向代理服务器,Nginx搭建支持...

    toutiaoNews:头条资讯,包含登录注册,评论,点赞,站内信,使用技术前端使用模版FreeMarker,后台springboot,mybatis,redis,拦截器,实现消息队列,异步更新数据库

    项目总结 (牛客网学习)头条资讯,包含登录注册,添加资讯,上传图片,评论,点赞,站内信,使用技术:前端使用模版FreeMarker,后台:...工具类,与业务无关常用的工具类(静态) intercepter 拦截器 configura

    最新最全的spring开发包

    这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用都要...

    SpringBoot_MyBatisPlus_Multi:SpringBoot集成MyBatisPlus多模块Maven开发

    ├─impl 业务逻辑接口实现类│├──dao 数据访问接口│├──entity 数据持久化实体类│├──datasources 多数据源工具类│├──shiro Shiro验证框架│ ├──task Quartz定时任务│ ├──util 项目所用的的...

    基于springboot+MyBatis实现的某房产平台系统源码+项目说明(毕设).zip

    Guava Cache(java工具类集的基础库,注册key的绑定) Druid(监控目的的数据库连接池),配置文件里面加密数据库密码 Freemarker:基于Java的生成html的模板引擎,用来前后端交互 Nginx:反向代理服务器,Nginx搭建支持...

    spring4.3.9相关jar包

    spring-core.jar(必须):这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 外部依赖Commons ...

    SpringBoot_MyBatisPlus:SpringBoot集成MyBatisPlus

    数据持久化实体类│├── datasources -- 多数据源工具类│├── shiro -- Shiro验证框架│├── task -- Quartz定时任务│├── util -- 工具类| ├── FreeMarker -- 自定义FreeMarker标签│├── ...

    spring jar 包详解

    (1) spring-core.jar 这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 (2) spring-beans.jar 这个jar文件是所有应用都要...

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

    spring-cloud-chapter:SpringCloud企业级核心技术,对应简书《 Spring Cloud核心技术》专题配套

    代码生成器(代码生成器) code-builder代码生成器根据你提供的模板文件(目前支持freemarker )自动生成实体类,可以很大很有效的提高开发效率。 Gitee地址: Github地址: : 持久化框架(MyBatis-Enhance) ...

    Java Web程序设计教程

    15.4.2工具类的实现 304 15.4.3管理员登录与退出实现 306 15.4.4系统管理实现 313 15.4.5图书管理实现 319 15.4.6读者管理实现 329 15.4.7借还管理实现 333 15.4.8前台功能实现 336 本章小结 342

    基于HSS的网站管理系统和新闻发布系统

    本系统是完全基于java的先进的流行架构HSSF(hibernate+spring+struts+freemarker) 开发的一套完整的集信息发布于一体的网站管理系统 整个系统的设计于开发从2005年5月至今的1.5版. 已经有两个成功案例(例如:...

    国产java类cms v3.0.161109.zip

    通俗来说,其实就是帮助你以最便捷的方式将各种类型的数据规范入库,尽可能少写代码,越少越好,做到极致,功能及页面都靠配置来完成,且能够即时修改即时显示,再配合一些工具及技巧就极大地提升了效率。...

    Spring 2.0 开发参考手册

    12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO...

Global site tag (gtag.js) - Google Analytics