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的便捷性,MyBatis的数据访问能力,FreeMarker的视图渲染功能,以及Maven的项目构建和管理,构建了一个高效、易维护的Web应用程序。这样的架构设计能够帮助开发者快速搭建项目,...
在实际项目中,一个简单的代码生成工具可能会利用SpringMVC和MyBatis的组合,通过用户输入的表结构信息,自动生成对应的实体类、Mapper接口、Mapper XML文件以及FreeMarker模板。这样的工具可以极大地提高开发效率,...
本篇文章将深入讲解如何使用FreeMarker来导出Word和PDF文件,并介绍相关工具类的实现。 首先,我们需要理解FreeMarker的工作原理。FreeMarker是一个基于模板的生成器,它通过读取模板文件和数据模型,然后将两者...
主要原因是FreeMarker内置了更多的功能,例如自动转义机制、丰富的内置函数等,这使得开发者无需额外编写工具类或方法即可完成许多常见的任务。而使用**Velocity**时,为了达到类似的效果,则可能需要开发者自己编写...
Java的`freemarker.template.Configuration`类可以帮助你完成这个任务。 ### 二、直接将图片64编码放入Word文档 1. **图片转64编码**: 图片可以被转换成Base64编码字符串,这允许我们直接将图片数据嵌入到文档的...
3. **模板处理**:Freemarker的`Template`类负责解析模板文件并生成最终输出。你通常会先加载模板文件,然后用`Template`的`process`方法传入数据模型,得到生成的文本。 4. **内置函数和指令**:Freemarker提供了...
- 运行SpringBoot应用,访问`http://localhost:8080/index`,浏览器将显示Freemarker模板渲染后的结果。 通过以上步骤,你可以在SpringBoot应用中成功集成并使用Freemarker模板引擎。这只是一个基础的介绍,实际...
在这个“SSH框架常用到的一些工具类整理”中,我们将探讨SSH框架下的一些关键工具类及其应用,这些工具类对于进行SSH开发至关重要。 首先,让我们关注Spring框架。Spring框架提供了一系列工具类,如`BeanUtils`,...
综上所述,这个SSH项目结合了Freemarker模板技术,使得前端展示更加灵活,同时利用Spring和Hibernate实现了业务逻辑与数据访问的解耦。尽管原项目中包含了Maven,但在某个阶段进行了精简,可能意味着项目采用了更...
在Android Studio(AS)中,FreeMarker API可以作为构建动态内容的有效工具。 FreeMarker的核心概念包括数据模型、模板和输出。数据模型是由程序提供的,包含了所有要在模板中显示的数据。模板是包含FreeMarker指令...
在IT行业中,SpringBoot、JPA(Java Persistence API)和Freemarker是常见的开发工具和技术,它们在构建高效、灵活的Web应用时发挥着重要作用。本篇将详细讲解如何利用这些技术来生成动态SQL。 首先,SpringBoot是...
总结,Freemarker是一个强大且灵活的工具,通过合理的数据模型设计和模板编写,可以方便地生成各种Java代码,极大地提高了开发效率。正确理解和运用Freemarker,将使你在代码生成任务上事半功倍。
使用这些工具类,开发者可以快速实现静态化分页,降低服务器压力,提高页面加载速度,提升用户体验。 总的来说,`httpclient`与`freemarker`在页面静态化分页中的结合使用,既保证了数据的动态获取,又实现了静态...
在本项目中,Freemarker被用来生成Java源代码,这些代码通常包括实体类(Entity)、数据访问对象(DAO)、服务接口(Service Interface)和服务实现(Service Implementation)等,它们与数据库表一一对应。...
8. **优化与扩展**:在实际项目中,还可以考虑引入Spring Boot简化配置,使用Thymeleaf或Velocity替代Freemarker,或者采用Spring Data JPA等高级技术进行数据访问。 以上就是"freemarker+ssm+maven整合"项目的主要...
- 将Action中的属性暴露给FreeMarker模板,通常是通过getter方法,FreeMarker可以访问这些属性并展示在页面上。 4. **结果类型配置**: - 在Action配置中,定义一个结果类型为`dispatcher`的结果,指定对应的...
1. **Template**: 这是FreeMarker的核心类,代表一个模板文件。你可以通过`TemplateLoader`加载模板,然后使用`process`方法将数据模型与模板合并。 2. **Configuration**: 用于配置FreeMarker的行为,如设置模板...
1. **安装与配置**:FreeMarker是一个轻量级库,可以通过Maven或Gradle等构建工具引入到Java项目中。配置主要涉及设置模板目录和配置文件`freemarker.properties`,其中定义了FreeMarker的行为,例如模板的缓存策略...