【前端】FreeMarker学习笔记

文章目录

  • 1. 介绍
  • 2.FreeMarker环境搭建(maven版本)
  • 3. 语法
    • 3.1 freemarker的数据类型
      • 3.1.1 布尔类型
      • 3.1.2 日期类型

FreeMarker视频教程

1. 介绍

中文官网
英文官网

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

在这里插入图片描述

这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。
而FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,它没有被绑定到 Servlet或HTML或任意Web相关的东西上。它也可以用于非Web应用环境中。

FreeMarker 不是一个Web应用框架,而适合作为Web应用框架一个组件
FreeMarker与容器无关,因为他并不直到HTTP或Servlet。FreeMarker同样可以应用于非Web应用程序环境。
FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以再模板中使用JSP标记库。

2.FreeMarker环境搭建(maven版本)

  • 引入pom依赖
 <!--freemarker坐标依赖--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency><!--servlet-api坐标依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version></dependency>
  • 使用jetty启动,配置jetty插件(版本很重要,不知道为啥其他版本启动后不能访问)
<!--配置jetty插件-->
<plugins><!--配置jetty插件,默认端口8080--><plugin><groupId>org.eclipse.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>9.2.1.v20140609</version></plugin></plugins>
  • 配置web.xml
 <servlet><servlet-name>freemarker</servlet-name><servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class><init-param><!--模板路径--><param-name>TemplatePath</param-name><!--默认在webapp目录下查找对应的模板文件--><param-value>/</param-value></init-param><init-param><!--模板默认的编码UTF-8--><param-name>default_encoding</param-name><param-value>UTF-8</param-value></init-param></servlet><!--处理所有以.ftl结尾的插件;ftl是freemarker默认的文件后缀--><servlet-mapping><servlet-name>freemarker</servlet-name><url-pattern>*.ftl</url-pattern></servlet-mapping>
  • 配置jetty启动
    在这里插入图片描述

<#-- ftl注释,浏览器中无法看到 -->
<!-- html注释,浏览器中可以看到-->

在这里插入图片描述

3. 语法

freemarker的语法:

  1. html中所有的标签都适用
  2. js与css的使用,与html中语法一致

3.1 freemarker的数据类型

在这里插入图片描述

3.1.1 布尔类型

在servlet中设置布尔类型的数据

req.setAttribute("flag", true);

${flag?c}
${flag?string}
${flag?string('yes','no')}

3.1.2 日期类型

在servlet中设置时间的数据

req.setAttribute("createDate", new Date());
  1. 年月日 ?date
  2. 时分秒 ?time
  3. 年月日时分秒 ?datetime
  4. 指定格式 ?sting("自定义格式")
    y:年, M:月, d:日
    H:时, m:分, s:秒

<#–输出日期格式–>
${createDate?date}

<#–输出时间格式–>
${createDate?time}

<#–输出日期时间格式–>
${createDate?datetime}

<#–输出格式化日期–>
${createDate?string(“yyyy年MM月dd日 HH:mm:ss”)}

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

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

相关文章

Excel 数据-分列的三个经常用法

Case 1 &#xff1a;有时候数据导出时如果没有电子表格的话&#xff0c;只能导出本地文件&#xff0c;如下图情况&#xff1a; 可以使用数据-分列处理数据&#xff1a; 原来是因为SAP导出数据没有完成的原因&#xff0c;或者关闭Excel重新打开试一下。 重新打开后可以输入了 C…

数字医疗:智慧医共体引领健康未来

随着科技的不断发展&#xff0c;数字医疗正在成为医疗行业的一场革命。数字化技术的应用不仅提高了医疗服务的效率和质量&#xff0c;还为人们带来了更便捷、智能的健康管理方式。在这个数字化时代&#xff0c;智慧医共体已经成为了健康未来的引领者。 数字医疗&#xff0c;顾…

自动驾驶---Motion Planning之轨迹Speed优化

1 背景 在之前的几篇文章中&#xff0c;不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》&#xff0c;ST图《自动驾驶---Motion Planning之Speed Boundary》&#xff0c;又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》&#xff…

无锡国家集成电路设计中心某公司的单锂小电机直流电机H桥驱动电路

H桥驱动 L9110S是一款直流电机驱动电路&#xff0c;适合单节锂电池应用。输出电流0.4A。价格约3毛。 推荐原因&#xff1a; 某些人应该知道这个地方&#xff0c;大多数人应该不知道这个地方&#xff0c;所以推荐一下。 这个地方去过几次&#xff0c;某公司与某方走的“近”&…

https安全性 带给im 消息加密的启发

大家好&#xff0c;我是蓝胖子&#xff0c;在之前# MYSQL 是如何保证binlog 和redo log同时提交的&#xff1f;这篇文章里&#xff0c;我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性&#xff0c;这也是分布式事务实现方式之一。今天来看看我们能够从http…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到&#xff1a; ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

uni app 扫雷

闲来无聊。做个扫雷玩玩吧&#xff0c;点击打开&#xff0c;长按标记&#xff0c;标记的点击两次或长按取消标记。所有打开结束 <template><view class"page_main"><view class"add_button" style"width: 100vw; margin-bottom: 20r…

【C语言】联合和枚举

个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似&#xff0c;但是联合体往往会节省更多的空…

日记本(源码+文档)

日记本&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明功能项目截图客户端首页日记列表 书写日记个人中心设置密码锁拨打客服热线修改信息退出登录登录页输入密码锁注册页 后端管理登录页首页管理员列表管理用户管理日记列表管理日记数据 文件包含…

最优算法100例之20-旋转数组求最小值

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的…

nut-ui中的menu 菜单组件的二次封装

这个菜单组件 一般可以直接用到项目里 如果复用性不强的话 直接使用 但是有一个问题 如果很多地方都需要用到这个组件 我们可以把这个组件二次封装一下 <template><div class"cinema-search-filter-component"><nut-menu><template #icon>&…

网络基础——ISIS

名词 ISIS&#xff1a;中间系统到中间系统&#xff0c;优先级是15集成化ISIS&#xff1a;这是在优化后&#xff0c;可以使用在OSI模型上的NET地址&#xff1a;由区域ID、系统ID和SEL组成&#xff0c;一台设备上最多配置3个NET地址&#xff0c;条件是区域号要不一致&#xff0c;…