自己在项目中写的简单的仿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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求: