Freeemarker 静态化文件

freee Programming Contest 2022(AtCoder Beginner Contest 264) 题解 (A~D) Atcoder Beginner Contest 264题解(A~D) 阅读详情

代码:

@SpringBootTest
@RunWith(SpringRunner.class)
public class FreemarkerTest {

    //基于模板生成静态化文件
    @Test
    public void testGenerateHtml() throws IOException, TemplateException {
        //创建配置类
        Configuration configuration=new Configuration(Configuration.getVersion());
        String classpath = this.getClass().getResource("/").getPath();
        //设置模板路径
        configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
        //设置字符集
        configuration.setDefaultEncoding("utf-8");
        //加载模板
        Template template = configuration.getTemplate("test1.ftl");
        //数据模型
        Map map = getMap();
        //静态化 在这返回的已经是整合好的html数据
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
        //静态化内容
        System.out.println(content);
        InputStream inputStream = IOUtils.toInputStream(content);
        //输出文件
        FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test1.html"));
        int copy = IOUtils.copy(inputStream, fileOutputStream);
    }
    //基于模板字符串生成静态化文件
    @Test
    public void testGenerateHtmlByString() throws IOException, TemplateException {
        //创建配置类
        Configuration configuration=new Configuration(Configuration.getVersion());
        //获取模板内容
        //模板内容,这里测试时使用简单的字符串作为模板
        String templateString="" +
                "<html>\n" +
                "    <head></head>\n" +
                "    <body>\n" +
                "    名称:${name}\n" +
                "    </body>\n" +
                "</html>";

        //加载模板
        //模板加载器
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",templateString);
        configuration.setTemplateLoader(stringTemplateLoader);
        Template template = configuration.getTemplate("template","utf-8");

        //数据模型
        Map map = getMap();
        //静态化
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
        //静态化内容
        System.out.println(content);
        InputStream inputStream = IOUtils.toInputStream(content);
        //输出文件
        FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test1.html"));
        IOUtils.copy(inputStream, fileOutputStream);
    }

    //数据模型
    private Map getMap(){
        Map<String, Object> map = new HashMap<>();
        //向数据模型放数据
        map.put("name","三年二班");
        Student stu1 = new Student();
        stu1.setName("小明");
        stu1.setAge(18);
        stu1.setMoney(1000.86f);
        stu1.setBirthday(new Date());
        Student stu2 = new Student();
        stu2.setName("小红");
        stu2.setMoney(200.1f);
        stu2.setAge(19);
//        stu2.setBirthday(new Date());
        List<Student> friends = new ArrayList<>();
        friends.add(stu1);
        stu2.setFriends(friends);
        stu2.setBestFriend(stu1);
        List<Student> stus = new ArrayList<>();
        stus.add(stu1);
        stus.add(stu2);
        //向数据模型放数据
        map.put("stus",stus);
        //准备map数据
        HashMap<String,Student> stuMap = new HashMap<>();
        stuMap.put("stu1",stu1);
        stuMap.put("stu2",stu2);
        //向数据模型放数据
        map.put("stu1",stu1);
        //向数据模型放数据
        map.put("stuMap",stuMap);
        return map;
    }

}

模板文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf‐8">
    <title>Hello World!</title>
</head>
<body>
Hello ${name}!
<br/>遍历数据模型中的stuMap(map数据),第一种方法:在中括号中填写map的key,第二种方法:在map后边直接加"点key"<br/>
姓名:${stuMap['stu1'].name}<br/>
年龄:${stuMap['stu1'].age}<br/>
输出stu1的学生信息:<br/>
姓名:${stuMap.stu1.name}<br/>
年龄:${stuMap.stu1.age}<br/>
遍历map中的key stuMap?keys 就是key列表(是一个list)
遍历输出两个学生信息:<br/>
<table>
    <tr>
        <td>序号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>钱包</td>
    </tr>
    <#list stuMap?keys as k>
        <tr>
            <#--_index:得到循环的下标,使用方法是在stu后边加"_index",它的值是从0开始-->
            <td>${k_index + 1}</td>
            <td <#if stuMap[k].name =='小明'>style="background: cornflowerblue"</#if> >${stuMap[k].name}</td>
            <td>${stuMap[k].age}</td>
            <td >${stuMap[k].money}</td>
        </tr>
    </#list>
</table>
</body>
</html>
SpringMVC+JPA+Freeemarker 纯javaConfig,无xml配置 消灭了xml配置,转为javaConfig配置类,Spring4.3.12,前端freemarker,持久层JPA 立即下载

相关推荐

Freemarker中文教程

该书非常详细地讲述了如何去使用freemarker生成静态文件的技术,值得一看。

FreeMarker 由浅入深二 FreeMarker开发环境搭建

FreeMark 思路解析:                在java程序中使用FreeMarker模板就是一个.ftl文本文件,在该文件中使用了一些FreeMarker的特别标记,这些标记会动态显示,或者控制程序输出,如下面的模板文件代码: ${name},你好!${msg} 这里类似于${}的就是动态的内容,称作"插值". 为了使用FreeMarker来将数据模型中的值合并到模

zhouzhiwengang的专栏 1803

生成静态页面 freemarker模板

用freemarker做模板,结合struts2生成静态页面功能,不要分,嘻嘻

【freemaker教程】----使用freemaker自定义函数

在使用freemaker的时候难免要做一些复杂的逻辑判断,这个时候我们可以使用freemaker的自定义函数功能封装出来一个处理逻辑,方便功能复用,下面以一个例子来示范怎样自定义函数并调用,

liuzhimin_的专栏 731

FreePunch (Free E-Punching Tools)-开源

基于Linux的客户端软件和一组AVR微控制器设备,支持定向越野运动中使用的SportIdent电子打Kong系统。 客户端将卡数据发送到PHP / SQL Web应用程序,该应用程序用作功能齐全的事件软件。

OTP语音芯片SOP8的前世今生_如九齐_硕呈_钰绅等以及国产方案KT148A

语音芯片ic的其中一个品类,就是SOP8封装的OTP语音芯片,非常的经典和常用。源头的供应商基本都是台系的原厂,比如:九齐、硕呈、佑华等等,其中佑华就算是鼻祖了,早期的4位机也是在语音市场得到了升华。 OTP(One Time Programmable)是单片机的一种存储器类型,意思是一次性可编程:程序烧入单片机后,将不可再次更改和清除。

qyvhome的博客 1873

Freemaker_入门+深入+开发指南+学习笔记

Freemaker 入门+深入+开发指南+学习笔记 freemaker的基本语法 freemaker的基本语法: 中存放所有freemaker的内容,之外的内容全部原样输出。 是函数调用 两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下: 条件判断 遍历hash表或者collection(freemaker称作sequ

莎莎的专栏 1万+

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1977

freee Programming Contest 2022(AtCoder Beginner Contest 264)A~D题详细讲解

freee Programming Contest 2022(AtCoder Beginner Contest 264)A~D题详细讲解

m0_70400544的博客 1482

Howland电流源电路:从理论到实践的深度解析与优化策略

本文深度解析了Howland电流源电路的工作原理,从经典四电阻架构的“虚短”“虚断”分析,到其实现宽带恒流输出的理论优势。重点剖析了实践中因电阻精度、运放参数及PCB布局导致的性能瓶颈,并提供了引入第五电阻、优化运放选型等关键优化策略,旨在将输出阻抗从kΩ级提升至MΩ级,以满足精密测量与传感器驱动等应用需求。

weixin_29243063的博客 441

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁)

本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。

s4t5u6v的博客 1028

FreeMarker - 页面静态化和FreeMarker简介及使用

什么是页面静态化 将动态页面转化成静态的html,降低与数据库的交互次数,提高页面的访问速度。就是服务器在请求来之前把已经固定好的东西先编译好了,等请求来了再动态的填数据,不要等请求来了什么都没做忙得半死。 为什么要使用网页静态化技术 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力。而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO(搜索引擎...

江南烟雨却痴缠丶 3062

东方财富API隐藏技巧:这样获取分时均价线数据更稳定(避坑指南)

本文深入解析东方财富API获取股票分时数据,特别是分时均价线的实战技巧与避坑指南。针对高频调用中常见的请求失败、数据错位及IP限制等问题,提供了从接口参数深层解析、稳健请求与错误处理机制,到系统优化与数据校验的全流程解决方案,帮助开发者构建稳定可靠的数据采集系统。

rice5的博客 2521

Freemarker

为什么要使用网页静态化技术网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道 或者是文章类的频道。 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息,这样 的情况同样也适用于使用网页静态化来解决。 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用 场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对

qq779890006的博客 596

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232

Cesium中级开发教程之二十二:视锥体

教程示例网站:https://thomaz529.github.io。

883

freemarker模板引擎

一。 freemarker简介 在互联网软件内容网站中 一般首页的访问量大,为了提供首页的访问效率,一般 首页的内容以及其中的新闻等信息都可以实现html静态化 浏览器访问时 设置浏览器的缓存策略和生成静态页面的周期一致 可以使访问效率大大提升 同时配合cdn处理图片 js css等资源 可以在首页访问时 理论完全脱离数据库 降低应用压力 原理图:...

weixin_30443747的博客 434

授时中心被攻击?Windows 11 电脑时间不准?手把手教您如何更换国内稳定高速的时间服务器(时间服务器整理)

近期授时中心被攻击,时间同步重要性凸显。Windows 11 默认服务器在国内常遇网络问题。本文教你轻松修改时间服务器,选择更稳定、快速的国内优质服务器,彻底解决电脑时间不准的烦恼,让你的系统时间永远精准如一!🚀

XiaoqiangClub的博客 1082

FreeMarker - 配置参数用法说明

【1】locale 作用: 设置默认地区,主要影响数字、日期输出格式,request中没有指定地区时模板查找的值。 值: zh_CN,en_US 配置实例: prop key="locale">zh_CNprop> 【2】classic_compatible 作用: 兼容旧版freemarker习惯,不建议使用,可能会导致一些额外的问题。如,include必须用绝

小小默:进无止境 5146

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Freemarker中文指南

序言目录一、什么是FreeMarker二、阅读指南三、文档约定四、联系方式五、关于本文档一、什么是FreeeMarkerFreeMarker是一个模板引擎:是一个基于模板生成文本的通用工具,任何文件...

cisiruan3500的博客 300

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

FreeMaker标签用法

FreeMarker标签使用  一、FreeMarker模板文件主要有4个部分组成   1、文本,直接输出的部分   2、注释,即格式不会输出   3、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出   4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。      FTL指令规则  

Tarzan的博客 637

freemarker 详细介绍

一、Freemarker初步使用 1、freemarker 介绍 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 可以直接在springboot 2.0中整合,使用起来 很方便。 2、创建web项目 本章还是以helloworld为例,引入freemarker。创建springboot的项目,选...

zhang_adrian的博客 2659

FreeMarker详解

什么是FreeMarker? FreeMarker是一款模板引擎,一种开源的、基于模板的、用来生成/输出文本的通用工具。 它不是面向最终用户的,不是Web应用框架,它是Java的一个类库,是Web应用框架中的一个实用的组件,是一款可以嵌入开发产品的一款应用程序。 FreeMarker的设计是被用来生成HTML页面,尤其是通过基于实现了MVC模式的Servlet应用程序。 使用MVC模式的动态网页的构思,使得你可以将前端设计从程序中分离出来,更加贴合java的各司其职的编程思想,使得代码更简洁且便于

m0_63324772的博客 2811

freemarker

什么是FreeMakrer模板引擎技术 FreeMakrer是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,具有以下特点: (1)FreeMakrer适合被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。 (2)虽然FreeMakrer具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMakrer生成页面,通过模板显示准备的数据 。

huoyunp的博客 893

一篇很全面的freemarker教程

copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,

宏轩JAVA技术专栏 57万+
上一篇: Freemarker 内建函数
下一篇: FastDFS
糖炒栗籽
博客等级 码龄11年 4粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值