freemarker实现和原理

性能优化:用FreeMarker实现页面静态化 众所周知,随着网站的访问量增加,如何给用户以良好的访问体验就显得尤为重要。提升网站性能便成为一些网站面临的一大难题,像hao123这样的导航网站要提升网站的性能只要部署的web服务器数量足够就可以承载超大规模的访问量,如果是一个动态的网站呢?例如像凤凰新闻、网易新闻这样的CMS系统,淘宝、京东这样的大型购物网站由于这些网站都使用到了数据库这也就很难做到单纯的通过增加web服务器数量的方式来有效的提 阅读详情
1.freemarker实现
1.工程目录结构

这里写图片描述

2.引入jar包

引入freemarker-2.3.15.jar包

3.web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>FreemarkerDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <!-- FreemarkerServlet settings: -->
    <init-param>
      <param-name>TemplatePath</param-name>
      <param-value>/</param-value>
    </init-param>

    <init-param>
      <param-name>NoCache</param-name>
      <param-value>true</param-value>
    </init-param>

    <init-param>
      <param-name>ContentType</param-name>
      <param-value>text/html</param-value>
    </init-param>

    <init-param>
      <param-name>template_update_delay</param-name>
      <param-value>0</param-value>
      <!-- 0 is for development only! Use higher value otherwise. -->
    </init-param>

    <init-param>
      <param-name>locale</param-name>
      <param-value>zh_CN</param-value>
    </init-param>

    <init-param>
      <param-name>default_encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>

    <init-param>
      <param-name>boolean_format</param-name>
      <param-value>true,false</param-value>
    </init-param>

    <init-param>
      <param-name>datetime_format</param-name>
      <param-value>yyyy-MM-dd HH:mm:ss</param-value>
    </init-param>

    <init-param>
      <param-name>date_format</param-name>
      <param-value>yyyy-MM-dd</param-value>
    </init-param>

    <init-param>
      <param-name>time_format</param-name>
      <param-value>HH:mm:ss</param-value>
    </init-param>

      <init-param>
      <param-name>number_format</param-name>
      <param-value>0.##########</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
  </servlet-mapping>
</web-app>

ftl文件,body.ftl,定义一个body宏

<#macro m1>
<h1>aaa</h1>
<h1>aaa</h1>
<h1>aaa</h1>
<h1>aaa</h1>
</#macro>

freemarkerTest.ftl文件引入body宏

<html>
<head>
<#import "body.ftl" as p>
</head>
<body>
<@p.m1/>
</body>
</html>

启动tomcat,在浏览器中输入http://localhost/FreemarkerDemo/freemarkerTest.ftl
这里写图片描述
引入freemarker成功。

2.原理

freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。
这里写图片描述
代码实现:

Configuration config=new Configuration();
  //设置要解析的模板所在的目录,并加载模板文件
  config.setDirectoryForTemplateLoading(new File(templatePath));
   //设置包装器,并将对象包装为数据模型
   config.setObjectWrapper(new DefaultObjectWrapper());
  //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
 //否则会出现乱码
Template template=config.getTemplate(templateName,“UTF-8”);
   //合并数据模型与模板
   FileOutputStream fos = new FileOutputStream(fileName);
   Writer out = new OutputStreamWriter(fos,“UTF-8”);
      template.process(root, out);
      out.flush();
      out.close();

另:freemarker变量值的获取

在Struts2框架下,Struts2框架充当了之前的Servlet角色,只要浏览器的请求经过Struts2处理后,Struts2都会自动加载FreeMarker模板,并使用数据模型来填充该模板,再将最后的HTML页面输出给客户端

Struts2解析FreeMarker模板中变量的顺序如下:
1,FreeMarker模板内建的变量;
2,ValueStack中的变量;
3,ActionContext中的变量;
4,HttpServletRequest中的属性;
5,HttpSession中的属性;
6,ServletContext范围的属性.

FreeMarker模板的内建变量有如下几个:
1,stack:代表ValueStack本身,可通过如下方式来访问其中的变量”${stack.findString(‘ognl expr’)}”
2,action:代表刚刚执行过的Action实例
3,response:代表HpptServletResponse实例
4,res:代表HpptServletResponse实例
5,request:代表HpptServletRequest实例
6,req:代表HpptServletRequest实例
7,session:代表HpptSession实例
8,application:代表ServletContext实例
9,base:代表用户请求的上下文路径.

Java学习指南(11) FreeMarker与MVC框架 〖课程介绍〗这是一篇网站原理课程,先介绍FreeMarker模板引擎的使用,然后以FreeMarker API为基础设计一个MVC框架,以此展开说明MVC框架的流程原理。演示平台:Eclipse EE ,FreeMarker 2.3  〖主要内容〗包含以下内容,具体以课程目录为准:*   开发环境与API*   基本类型的插值*   Hash 与 Sequece类型的插值*   常用的 built-in 用法*    等指令的用法*   自定义函数 Method Variables *   共享变量 Shared Virablles*   全局配置,及单例设计*   基于 FreeMarker 设计一个网站后台MVC框架,借此阐述MVC框架的一般性原理。 〖课程体系〗JavaWeb相关课程:-   HTML网页基础教程 -   VUE框架基础 -   网站开发入门教程 -   网站开发进阶教程 -   JDBC数据库教程 -   FreeMarker_MVC原理教程-   Spring系列课程、MyBatis、Redis等系列课程 立即下载

相关推荐

Freemarker原理解析

FreeMarker适合于作为Web应用的表现层。freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。了解了上面的原理,接下来我就一步 步带您实现FreeMarker生成静态页面。

Freemarker模板引擎详解-优快云博客

Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为java程序员提供的一个开发包,或者说是一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。Freemarker 是使用纯java编写的,为了提高页面的访问速度,需要把页面静态化, 那么Freemarker就是被用来生成html页面。到目前为止,Freemarker使用越来越广泛,不光光只是它强大的生成技术,而且它能够与spring进行很好的集成。

求知若渴、虚心若愚 1074

logisim实验六:MIPS运算器设计

实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。 设计要求 利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号

gyp0205的博客 2万+

FreeMarker详解

freemarker 详解 一、定义:FreeMarker只一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页等),是一个java类库。 二、用法:(freemarker怎么生成静态页面 ) 1. 手动生成(也有人叫立即生成)。 手动生成也就是说创建一个静态的页面来管理列表进行某块业务专门处理。例如:在工作当中,需要立即修改静态页面中的一个模块,而且时间也比较紧急,那么...

xpf_123的博客 1001

【GPIO模拟串口通信协议】

由于这段时间搞了个安卓相关的项目,需要和安卓进行Uart通信。但是选用的芯片并没有自带uart功能,所以在充分评估项目后,考虑波特率不高的情况下,决定使用GPIO去模拟串口通信协议了。

学海无涯苦作舟 2638

使用VNC可视化Docker容器

Docker容器可视化

Robert_Q的博客 1万+

FreeMarker的原理

FreeMarker是一个Java库,用于生成文本输出(如HTML网页、电子邮件、配置文件、源代码等),基于模板和传递给模板的数据。它通常被用作Web应用程序的视图层,以生成动态HTML内容。FreeMarker的设计理念是将页面设计(HTML或其他格式)与页面的动态内容分离,从而提高Web开发的效率和可维护性。

m0_54187478的博客 744

画了多年板子才搞懂:Allegro内电层负片连接,Thermal Relief和Anti-Pad避坑全解析

本文深入解析Allegro内电层设计中Thermal Relief与Anti-Pad的关键技术要点,帮助工程师避免常见设计陷阱。通过六层板实战案例,详细阐述负片连接逻辑、热风焊盘参数设计及隔离盘优化策略,提升PCB设计的可靠性与EMI性能。

weixin_28731223的博客 265

freeMarker(十三)——XML处理指南之揭示XML文档

学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 前言   尽管 FreeMarker 最初被设计用作Web页面的模板引擎, 对于2.3版本来说,它的另外一个应用领域目标是: 转换XML到任意的文本输出(比如HTML)。 因此,在很多情况下,FreeMarker 也是一个可选的XSLT。   从技术上来说,在转换...

weixin_30515513的博客 465

AMD显卡跑MiniMax H3提速30%:SageAttention ROCm适配全记录

在Transformer架构的视频生成模型中,注意力计算往往是性能瓶颈,尤其当显存资源受限时,低精度量化与内核优化成为关键突破口。SageAttention通过将QK^T矩阵乘法量化为INT8,并以FP16/INT4表达注意力概率矩阵,在保证画质的前提下显著降低访存与计算开销,相比传统FlashAttention具备更高速度上限。这一技术价值在本地部署场景尤为突出——当用户使用非NVIDIA显卡运行大型视频模型时,通用优化库常因依赖CUDA而失效。本文聚焦AMD ROCm平台下的MiniMax H3视频生成

weixin_32238157的博客 283

图像处理(12)--图像各种噪声及消除方法

文章目录结构1.什么是图像噪声2. 图像噪声来源3. 噪声分类及其消除方法3.1 高斯噪声及其消除方式3.1.1 如何确定一种噪声是高斯噪声3.1.2 高斯滤波消除高斯噪声3.1.3 高斯函数的重要性质3.2 瑞利噪声及其消除方式3.3 伽马(爱尔兰)噪声及其消除方式3.4 指数分布噪声及其消除方式3.5 均匀噪声及其消除方式3.6 脉冲(椒盐)噪声及其消除方式 1.什么是图像噪声 图像噪声是指...

ShaneHolmes 11万+

基于freemarker构建专属代码生成器——代码生成器的底层原理

通常来讲,在Java开发中最基本的也是占用我们最大量事件的就是CRUD,也就是频繁地构造“实体类”、“dao层代码”以及相关的service层和controller层的代码。其实,这一部分工作,可以使用代码生成器来完成,这里就要用到,我们的freemarker引擎了,我们需要将刚刚的代码复制到Hello.ftl文件中,然后将World和world提出按成变量(注意这里区分大小写)当然,我们可以使用循环,判断等逻辑表达生成更加复杂,通用性更好的模板。经过这样的三步走,最终就是我们的想要生成的目标代码。

m0_47532096的博客 1250

从零开始讲DDR(5)——读懂Datasheet

对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。

apple_53311083的博客 5223

freemarker 解析对象的某元素_对Vue中的MVVM原理解析和实现

首先你对Vue需要有一定的了解,知道MVVM。这样才能更有助于你顺利的完成下面原理的阅读学习和编写下面由我阿巴阿巴的详细走一遍Vue中MVVM原理的实现,这篇文章大家可以学习到:1.Vue数据双向绑定核心代码模块以及实现原理2.订阅者-发布者模式是如何做到让数据驱动视图、视图驱动数据再驱动视图3.如何对元素节点上的指令进行解析并且关联订阅者实现视图更新1、思路整理实现的流程图:我们要实现一个类MV...

weixin_42495661的博客 195

世界模型(World Models)进展全景调研(截至 2025-08)

A5) 2019-07(待核验) | C-SWM:Contrastive Structured World Models(Kipf et al.)A6) 2019-07(待核验) | SLAC:Stochastic Latent Actor-Critic(Lee et al.)A3) 2015-12(背景注记,待核验) | Embed to Control(E2C,Watter et al.)Nature 2020)Repro/Code:werner-duvaud/muzero-general(社区)

u013250861的博客 489

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Freemarker新手教程详细

一、Freemarker的介绍 Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为Java程序员提供的一个开发包,或者说是一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。 Freemarker 是使用纯java编写的,为了提高页面的访问速度,需要把页面静态化, 那么Freemarker就是被用来生成html页面。 到目前为...

zyhnini的博客 7790

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

freemarker+yml介绍 以及freemarker与JSP的区别

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。

m0_62019369的博客 1793

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

freemarker的学习和使用

freemarker是一款模板引擎,它实现程序逻辑和页面设计的分离,完成静态文本的输出。它不是web开发框架,准确来说,它仅仅只是我们MVC开发下,视图层的一个组件而已。

siqilou的专栏 3920

从DOCX原理解决FreeMarker生成WORD乱码问题

利用freemarker模板引擎生成word乱码避坑

qq_41364367的博客 1126

FreeMarker

1,servlet 略 2,springMVC 2.1,运行原理 2.2,springMVC整合FreeMarker 2.2.1,导入依赖 2.2.2,配置 配置freemarker.properties 2.2.3,注入springMVC

weixin_42975911的博客 348

基于STM32F429与MP2642GR-Z的储能电池主动均衡方案设计与实现

电池管理系统(BMS)中,串联电池组因单体差异导致容量衰减与寿命缩短,均衡技术成为关键。主动均衡通过能量转移替代被动耗散,效率可达85%以上,适用于储能与备用电源等大容量场景。其核心在于双向拓扑、电感选型与电流闭环控制,结合高精度电压采集与温度保护,确保系统稳定。本文以两串磷酸铁锂电池为例,采用STM32F429主控与MP2642GR-Z均衡控制器,实现1.5A均衡电流,30分钟将80mV压差收敛至10mV,并给出硬件参数计算、状态机设计及避坑指南,为储能BMS均衡设计提供工程实践参考。

aofan9566的博客 473

Android freemarker模板引擎应用

什么是freemarker? 在说这个之前我们都知道web和原生控件之争就那么点事。性能,加载速度,流量,数据交互…. 如果我用webView加载一个url页面,要先通过网络解析css,解析html代码,然后渲染生成页面 什么是freemarker?简单点就是,事先把上面这个html文件,放到应用中,用的时候只要传入数据就行 freemarker优点...

weixin_33739627的博客 662

在 Spring Boot 中实现 FreeMarker 模板

FreeMarker是一种功能强大、轻量级的模板引擎,用于在 Java 应用中生成动态文本输出(如 HTML、XML、邮件内容等)。它允许开发者将数据模型与模板文件分离,通过模板语法动态生成内容。FreeMarker 广泛用于 Web 开发、报表生成和自动化文档生成,特别是在 Spring Boot 项目中与 Spring MVC 集成,用于生成动态网页。FreeMarker 是一种高效的模板引擎,适合生成动态内容。在 Spring Boot 中,通过快速集成。

lssffy的博客 1519

freemarker学习#1

Freemarker学习笔记

Zack_ZXY的博客 4016

页面静态化技术Freemarker技术的介绍及使用实例.

一、FreeMarker简介   1、动态网页和静态网页差异    在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术。静态网页,随着HTML代码的生成,页面的内容和显示效 果就不会再发生变化(除非你修改页面代码)。而动态网页则不然,页面代码虽然没有发生变化,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而 发生相应的变化。简而言之,动态网...

lisheng19870305的专栏 739

Sitemesh与Freemarker

SiteMesh简介     sitemesh应用Decorator模式,用filter截取request和response,把页面组件head,content,banner结合为一个完整的视图。通常我们都是用include标签在每个jsp页面中来不断的包含各种header, stylesheet,         scripts and footer,现在,在sitemesh的帮助下,我们可以

Michael Wing's workspace 2304
上一篇: freemarker常用语法
下一篇: springMvc实现
芥子风
博客等级 码龄15年 6粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值