模板引擎技术---FreeMarker

什么是模板引擎

模板引擎是一种用于生成动态内容的工具,它将数据和静态模板结合起来,生成最终的文档(通常是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.hqwc.cn/news/156906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node学习笔记之跨域

1.跨域是什么&#xff1f; 跨域&#xff0c;是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对JavaScript实施的安全限制。 同源策略限制了一下行为&#xff1a; Cookie无法读取DOM 和 JS 对象无法获取Ajax请求发送不出去 同源是指&#…

摩尔斯电码加密字符串

摩尔斯电码滴答“.-”&#xff0c;加密字符串。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单………

用前端框架Bootstrap的AdminLTE模板和Django实现后台首页的页面

承接博文 用前端框架Bootstrap和Django实现用户注册页面 继续开发实现 后台首页的页面。 01-下载 AdminLTE-3.1.0-rc 并解压缩 以下需要的四个文件夹及里面的文件百度网盘下载链接&#xff1a; https://pan.baidu.com/s/1QYpjOfSBJPmjmVuFZdSgFQ?pwdo9ta 下载 AdminLTE-3.1…

代码随想录二刷Day 56

1143.最长公共子序列 本题和动态规划&#xff1a;718. 最长重复子数组 (opens new window)区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;"ace" 是 "abcde" 的子序列&#xff0c;但 "aec" 不是 "abcd…

重温云栖,分享十年成长:我和云栖的故事

文章目录 前言活动背景我和云栖的交际历届峰会主题2009201020112012201320142015201620172018202120222023 技术带来的变化工作生活关注的领域 后记 前言 云栖大会&#xff0c;前身可追溯到2009年的地方网站峰会&#xff0c;2011年演变为阿里云开发者大会&#xff0c;2015年正式…

rcore 笔记 批处理系统 邓氏鱼

批处理系统 批处理系统 (Batch System) &#xff0c;它可用来管理无需或仅需少量用户交互即可运行的程序&#xff0c;在资源允许的情况下它可以自动安排程序的执行&#xff0c;这被称为“批处理作业”。 特权机制 实现特权级机制的根本原因是应用程序运行的安全性不可充分信…

修改element组件库的el-input-number的图标

官方样式&#xff1a; 我希望组件的图标改成一对上下是三角形的图标&#xff1a; 直接复制以下代码&#xff1a; ::v-deep .el-icon-arrow-down:before {content: "\e790"; } ::v-deep .el-icon-arrow-up:before {content: "\e78f"; } 完成&#xff01…

【高光谱与多光谱:空间-光谱双优化模型驱动】

A Spatial–Spectral Dual-Optimization Model-Driven Deep Network for Hyperspectral and Multispectral Image Fusion &#xff08;一种用于高光谱与多光谱图像融合的空间-光谱双优化模型驱动深度网络&#xff09; 深度学习&#xff0c;特别是卷积神经网络&#xff08;CNN…

uniapp开发小程序无法上传图片的解决方法

登录小程序后台&#xff0c;第一步菜单栏 设置 第二步&#xff0c;用户隐私保护 更新 第三步 选2 第四步 勾选需要的接口&#xff0c;并说明 等审核通过后&#xff0c;一会就能正常上传图片。

php实现关键词过滤

1. 构建关键词库 首先&#xff0c;你需要构建一个包含敏感关键词的库。你可以将这些敏感关键词存储在一个数组中&#xff0c;或者将它们存储在数据库中。 $keywords array(敏感词1,敏感词2,敏感词3,// 其他敏感词 ); 2. 实现关键词过滤函数 接下来&#xff0c;你需要实现一个…

Qt 中model/View 架构 详解,以及案例实现相薄功能

model/View 架构 导读 ​ 我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的 Qt 要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改…

基于nodejs+vue啄木鸟便民维修网站设计与实现

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…