自己在项目中写的简单的仿freemarker模板引擎工具

2024-01-26 23:38

本文主要是介绍自己在项目中写的简单的仿freemarker模板引擎工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文:自己在项目中写的简单的仿freemarker模板引擎工具

源代码下载地址:http://www.zuidaima.com/share/1550463381490688.htm

自己在项目中写的简单的仿freemarker模板引擎工具
1. 支持 类 freemarker 风格注释

<#-- 我是注释,你看不到我,你看不到我 *^_^* -->

2. 支持模型数据的自动填充替换, 模板中的变量名定义为 #{val}

例如: register-success-mail.tpl 恭喜: #{account} 注册成功 点击<a href="#{url}">这里</a> 激活账号

3. 暂时不支持 迭代、日期格式化 等等....

4. 祝您学习愉快 ....

大家有兴趣可以自行扩展,然后在 javaniu 上面分享

/**    Copyright 2012-2013 The Haohui Network Corporation*/
package com.haohui.baidamei.client.web.json.template;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** <pre>* 模板资源读取工具* </pre>* * @project baidamei* @author cevencheng <cevencheng@gmail.com> www.zuidaima.com* @create 2012-11-24 下午9:21:51*/
public class TemplateUtils {public static URL getResource(String name) {return TemplateUtils.class.getResource(name);}/*** t1: 支持模板注释 和 jsp 代码级别注释* <#-- freemarker 注释 -->* <%!-- jsp 代码级别 注释 -->* * @param templateName* @param encoding* @return* @throws URISyntaxException */public static String processTemplateIntoString(String templateName, String encoding) {URL url = TemplateUtils.class.getResource(templateName);if (null == url) {throw new RuntimeException("模板文件[com/haohui/baidamei/client/web/json/template" + templateName + "]不存在");}if (null == encoding) {encoding = "utf-8";}encoding = encoding.trim();StringBuilder str = new StringBuilder();FileInputStream fs = null;InputStreamReader isr = null;String content = null;try {fs = new FileInputStream(new File(url.toURI()));isr = new InputStreamReader(fs, encoding);// 方法2:自己实现 bufferchar[] buffer = new char[1024];int len = 0; while ((len = isr.read(buffer)) > 0) {str.append(buffer, 0, len);}content = str.toString();String parttern = "<#--[\\w\\W\r\\n]*?-->";Pattern p1 = Pattern.compile(parttern);Matcher m1 = p1.matcher(content);content = m1.replaceAll(""); //去掉模板注释return content;} catch (Exception e) {throw new RuntimeException(e.getMessage(), e.getCause());} finally {try {isr.close();fs.close();} catch (IOException e) {throw new RuntimeException(e.getMessage(), e.getCause());}}}public static String processTemplateIntoString(String templateName, String encoding, Map<Object, Object> model) {URL url = TemplateUtils.class.getResource(templateName);if (null == url) {throw new RuntimeException("模板文件[com/zuidaima/baidamei/client/web/json/template" + templateName + "]不存在");}if (null == encoding) {encoding = "utf-8";}encoding = encoding.trim();StringBuilder str = new StringBuilder();FileInputStream fs = null;InputStreamReader isr = null;String content = null;try {fs = new FileInputStream(new File(url.toURI()));isr = new InputStreamReader(fs, encoding);// 方法2:自己实现 bufferchar[] buffer = new char[1024];int len = 0; while ((len = isr.read(buffer)) > 0) {str.append(buffer, 0, len);}content = str.toString();String parttern = "<#--[\\w\\W\r\\n]*?-->";Pattern p1 = Pattern.compile(parttern);Matcher m1 = p1.matcher(content);content = m1.replaceAll(""); //去掉模板注释// 处理模板变量 #{name} -->> 成功if (model.size() > 0) {for (Map.Entry<Object, Object> entry : model.entrySet()) {String regex = "#\\{" + entry.getKey() + "\\}";content = content.replaceAll(regex, entry.getValue().toString());}}return content;} catch (Exception e) {throw new RuntimeException(e.getMessage(), e.getCause());} finally {try {isr.close();fs.close();} catch (IOException e) {throw new RuntimeException(e.getMessage(), e.getCause());}}}public static void main(String[] args) {processTemplateIntoString("www.zuidaima.com", null);}
}

 

这篇关于自己在项目中写的简单的仿freemarker模板引擎工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/648402

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知