模板引擎技术---FreeMarker

news2025/4/16 11:31:41

什么是模板引擎

模板引擎是一种用于生成动态内容的工具,它将数据和静态模板结合起来,生成最终的文档(通常是HTML、XML、JSON等格式),这些文档可以被浏览器或其他客户端解析并展示给用户。模板引擎的主要目的是将数据和表现分离,使得在不改变页面结构的情况下,能够动态地生成页面内容。
在Web开发中,模板引擎通常用于构建动态网页。当用户访问一个网页时,服务器端的应用程序会处理请求,从数据库或其他数据源获取数据,然后将这些数据插入到事先定义好的模板中,生成最终的HTML页面,然后返回给用户的浏览器。这种方式允许开发人员更好地组织和管理页面结构,并且将动态数据动态地插入到页面中。

在现在前后端分离,前端使用vue,React生态的现在这项技术基本很少用了,但是也并不是没有优点,可以了解学习

在这里插入图片描述

和vue作用渲染前端的比较FreeMarker和Vue.js是用于构建Web页面的两种不同的技术,它们有不同的应用场景和优劣势。选择哪个更好取决于你的需求和项目的特点。

FreeMarker:

  • 静态生成: FreeMarker通常用于服务器端渲染(SSR),它可以帮助你生成静态HTML页面。这意味着页面在服务器上生成,然后作为静态文件传递给客户端。这对于SEO友好和性能优化非常有帮助,因为搜索引擎可以轻松地索引静态页面,并且无需在每个请求上执行客户端渲染。这对于内容不频繁更改的网站非常有用。
  • 服务器负载较高: 由于每个页面请求都需要服务器渲染,这可能会增加服务器负载,尤其是在高流量网站上。
  • 较少的前端交互性: FreeMarker生成的页面通常具有较少的前端交互性,因为大部分渲染工作在服务器上完成。如果你需要更多的前端交互性,可能需要结合其他前端框架。

Vue.js:

  • 客户端渲染: Vue.js通常用于客户端渲染,它允许在客户端浏览器上渲染页面。这意味着数据通过API请求从服务器获取,然后在客户端渲染。这可以提供更丰富的用户交互体验。
  • 动态数据处理: Vue.js适用于需要大量前端交互性和动态数据处理的应用程序,例如单页面应用程序(SPA)。它可以在页面上实时更新数据,允许用户与应用程序进行更多的互动。
  • SEO挑战: 但是,客户端渲染对于SEO来说可能有挑战,因为搜索引擎可能难以抓取动态生成的内容。尽管有解决方案,但需要更多的工作。

实践

  1. 添加依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- apache 对 java io 的封装工具库 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
  1. 创建模板目录在resource目录下
    创建templates文件夹
    在这里插入图片描述
  2. 配置文件
server:
  port: 8881 #服务端口
spring:
  application:
    name: freemarker-demo #指定服务名
  freemarker:
    cache: false  #关闭模板缓存,方便测试
    settings:
      template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
    suffix: .ftl               #指定Freemarker模板文件的后缀名
  1. springboot控制层添加视图转发和控制
    使用controller做视图转发,mvc model and view

@Controller
public class HelloController {

    @GetMapping("/basic")
    public String test(Model model) {


        //1.纯文本形式的参数
        model.addAttribute("name", "freemarker");
        //2.实体类相关的参数

        Student student = new Student();
        student.setName("小明");
        student.setAge(18);
        model.addAttribute("stu", student);

        return "01-basic";
    }
}

  1. 配置文件中指定了模板的后缀所以这里创建的模板后缀也要跟配置文件统一
    在templates下创建01-basic.ftl
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World!</title>
</head>
<body>
<b>普通文本 String 展示:</b><br><br>
Hello ${name} <br>
<hr>
<b>对象Student中的数据展示:</b><br/>
姓名:${stu.name}<br/>
年龄:${stu.age}
<hr>
</body>
</html>

启动服务在这里插入图片描述访问controller的mapping地址看是否成功转发,并且渲染数据在这里插入图片描述
这样就做到了模板渲染数据到html到游览器(SSR)

综合考虑,选择FreeMarker还是Vue.js取决于项目的需求。如果你的网站主要是展示性内容,不需要复杂的前端交互性,并且SEO对你很重要,那么使用FreeMarker生成静态页面可能更合适。如果你需要更多的前端交互性和动态性,那么Vue.js等现代前端框架可能更适合你的应用。有时候,你也可以考虑使用两者的结合,例如使用Vue.js来处理某些动态部分,同时使用FreeMarker生成静态内容。是的,你理解得很正确。模板引擎通常用于后端渲染,即在服务器端生成HTML,然后将生成的HTML发送到客户端浏览器,由浏览器进行展示。这种方式被称为服务器端渲染(SSR),它以服务器为中心,动态生成HTML,然后将静态HTML页面发送到客户端。
而Vue.js、React和其他类似的JavaScript框架和库是用于前端渲染,它们运行在客户端浏览器上。这些前端框架在客户端动态地生成和更新页面内容,无需从服务器获取完整的HTML页面。这种方式被称为客户端端渲染(CSR),因为渲染过程发生在客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jquery变焦放大效果

实现效果&#xff1a; jquery变焦放大效果,一般商城网站的商品都会有这样的效果&#xff0c;点击或者鼠标放在图片上时&#xff0c;会展示出一个比较大的图片&#xff0c;让我们对商品观看的更清楚&#xff0c;青柠资源网推荐下载&#xff01; 下载地址 qnziyw点cn/wysc/wytx…

自动化测试实战篇:UI自动化测试用例管理平台搭建

用到的工具&#xff1a;python3 django2 mysql RabbitMQ celery selenium python3和selenium这个网上很多教程&#xff0c;我不在这一一说明&#xff1b; 平台功能介绍&#xff1a; 项目管理&#xff1a;用于管理项目。每个项目可以设置多个环境&#xff0c;例如开发环境…

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权 问题背景&#xff1a; 小程序用户头像昵称获取规则调整公告官方 微信团队2022-05-09 更新时间&#xff1a;2022年11月9日 由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问…

“Lazada API揭秘:按关键字搜索商品,轻松掌握电商未来!“

Lazada的API可以按关键字搜索商品。请求参数包括&#xff1a; key&#xff1a;调用key&#xff0c;必须以GET方式拼接在URL中。secret&#xff1a;调用密钥。qshoe&&#xff1a;要搜索的关键字。start_price&end_price&&#xff1a;价格范围&#xff0c;可按价格筛…

HackTheBox-Starting Point--Tier 1---Pennyworth

文章目录 一 题目二 实验过程 一 题目 Tags Web、Common Applications、Jenkins、Java、Reconnaissance、Remote Code Execution、Default Credentials译文&#xff1a;Web、常见应用、Jenkins、Java、侦察、远程代码执行、默认凭证Connect To attack the target machine, y…

行情分析——加密货币市场大盘走势(11.1)

大饼短期内处于震荡&#xff0c;目前在吸血山寨。对于做中长线的也是可以秉持“做多大饼&#xff0c;做空山寨“的原则。目前大饼依然保持逢低做多即可&#xff0c;短期内依然不容易下跌。稳健的朋友&#xff0c;大家可以不做大饼。 以太目前也是处在震荡向上过程&#xff0c;以…

浅谈电动汽车充电桩检测技术的实现

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a; 关键词&#xff1a;电动直流和交流充电桩是我国电动汽车充电桩中运行量较大的一种。为了保持正常运行和使用&#xff0c;应高度重视检测、运行和维护工作。因此&#xff0c;有关部门应做好充电桩的检测工作…

MIT6.5830 Lab1-GoDB实验记录(二)

MIT6.5830 Lab1-GoDB实验记录&#xff08;二&#xff09; – WhiteNights Site 标签&#xff1a;Golang, 数据库 接下来我们将完成tuple.go的缺失代码&#xff0c;并通过tuple_test.go的测试。 实验步骤 观察tuple.go 观察肯定是第一步&#xff0c;先打开tuple.go。 快300行代…

【嵌入式开发学习】__hex文件、bin文件、axf文件的区别

目录 前言 一、编译的过程 二、可烧录的文件 三、离线文件的烧录方法 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 前言 在STM32开发中&#xff0c;经常会碰到hex文件、bin文件、axf文件&#xff0c;这些都是可以烧写到板子里运…

股神巴菲特靠押注加密获巨额利润?比特币成不确定时代的投资选择!

股神巴菲特(Warren Buffett)以前曾将比特币描述为“老鼠药”&#xff0c;表达了对加密货币发展的悲观看法。然而他却通过持有一家对比特币友好的银行的股票&#xff0c;获得了巨额利润。 据悉&#xff0c;伯克希尔哈撒韦公司在2021年6月向Nu Holdings投资了5亿美元&#xff0c;…

Latex排版SIGGRAPH总结(持续总结中...)

本文学习总结自&#xff1a;How to use the ACM SIGGRAPH / TOG LaTeX template 相关文件&#xff1a;百度网盘 首先解压 “my paper” 中的文件&#xff0c;并用Latex打开mypaper.tex. 多行连等公式 \begin{equation}表示编号公式&#xff0c;\[ \]表示无编号公式 无编号\b…

设计模式—创建型模式之建造者模式

设计模式—创建型模式之建造者模式 如果我们创建的对象比较复杂&#xff0c;但其细节还要暴露给使用者&#xff0c;这样就需要用到建造者模式。 建造者设计模式&#xff0c;屏蔽过程&#xff0c;而不屏蔽细节。 比如我们有一个手机类&#xff0c;定义如下&#xff1a; publ…

在 Linux 中更改 echo 的输出颜色

文章目录 前言一、快速入门二、基本使用2.1 对于常规的输出2.2 对于字体加粗的输出2.3 对于字体斜体的输出2.4 对于带下划线的输出2.5 对于闪烁效果的输出 三、小结 前言 在计算机编程世界中&#xff0c;颜色不仅仅是一种视觉效果&#xff0c;它也是一种信息传递的工具。特别是…

ES-初识ES

文章目录 介绍ElasticSearchElasticSearch的主要功能ElasticSearch的主要特性ElasticSearch的家族成员LogStashKibanaBeats ELK&#xff08;ElasticSearch LogStash Kibana&#xff09;的应用场景与数据库集成指标采集/日志分析 安装和配置ElasticSearch一、安装1、下载ES安装…

项目级asp.net框架的LIMS实验室管理系统源码

LIMS可用于管理完整的实验程序&#xff0c;从样品登记到检验、校核、审核到最终批准报告&#xff0c;建立在过程质量控制的基础上&#xff0c;对检测流程进行有效全面的管理&#xff0c;对影响质量的人、机、料、法、环因素加以控制&#xff0c;同时为质量改进提供数据依据。进…

如何快速绘制网络拓扑图

关于网络拓扑 网络拓扑能直观明了的展示网络中各网元之间的关系&#xff0c;极大方便运维人员对网络进行实时监测、优化配置、故障排查等操作。 传统采用Visiot或PowerPoint的方式存在耗时耗力且无法实现动态更新&#xff0c;维护及使用成本高&#xff1b;可展现的内容有限&a…

Open-AI的野心,绝不止于文字聊天,或在为未来人形伴侣打基础

01 前言 最近浏览Open-AI的官网&#xff0c;看到其官网目前除了gpt4外&#xff0c;更新的音频&#xff0c;图像模块&#xff0c;小编顿时感叹&#xff0c;Open-AI的野心&#xff0c;绝对不不止于文字聊天&#xff01; 02 生成式AI大模型的领先者从openai开始发布Chatgpt以来…

YOLOv5优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(SC_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 目录 1. SC_C_Detect介绍 2. SC_C_Detect加入YOLOv5 2.1 新建models/head_improve.py

c++ Vector 学习

vevtor 是c 中自带得动态数组&#xff0c;dynamic array array can hold different values/objects of same type 可以装不同得类型或者对象 dynamic size can be changed at runtime 可以运行得时候改变 要使用的话&#xff0c;先引入 #include <vector> std::vector…

数字人小灿:始于火山语音,发于 B 端百业

火爆的数字人市场又有新消息来袭&#xff1a;火山语音的数字人小灿来了&#xff01; 数字人小灿首曝视频 今年以来&#xff0c;在生成式AI浪潮的助推下&#xff0c;大量企业争相布局数字人赛道。市场之所以如此火热&#xff0c;是因为AI数字人已被视为人工智能时代智能交互的入…