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

news2025/7/8 18:36:09

目录

1. freemarker介绍 

2. freemarker使用步骤

  2.1 在pom.xml引入freeMarker的依赖包

  2.2 在springboot中添加freemarker配置

  2.3 编写模板文件*.ftl(当做jsp使用即可)

​编辑  

  2.4 访问控制器后进行页面跳转      

3. freemarker常用语法

  3.1 取值

   3.2 条件

   3.3 循环

   3.4 include

   3.5 局部变量(assign)/全局变量(global)

4. yml的介绍

"freemarker"和"jsp"的区别和联系有:

一、jsp

优点:

1、功能强大,可以写java代码

2、支持jsp标签(jsp tag)

3、支持表达式语言(el)

4、官方标准,用户群广,丰富的第三方jsp标签库

5、性能良好。jsp编译成class文件执行,有很好的性能表现

缺点:

jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

二、freemarker

优点:

1、不能编写java代码,可以实现严格的mvc分离

2、性能非常不错

3、对jsp标签支持良好

4、内置大量常用功能,使用非常方便

5、宏定义(类似jsp标签)非常方便

6、使用表达式语言

缺点:

1、不是官方标准

2、用户群体和第三方标签库没有jsp多

选择freemarker的原因:

1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。

2、宏定义比jsp tag方便

3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便

4、支持jsp标签

5、可以实现严格的mvc分离


1. freemarker介绍 

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

FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据


   注1:springboot中支持的两种模板技术
        thymeleaf(默认)/freemarker

      


2. freemarker使用步骤


  2.1 在pom.xml引入freeMarker的依赖包
 

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
      </dependency>

  2.2 在springboot中添加freemarker配置

spring: 
      freemarker:
        #指定HttpServletRequest的属性是否可以覆盖controller的model的同名项
        allow-request-override: false
    #req访问request
        request-context-attribute: req
    #后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.html
        suffix: .ftl
    #设置响应的内容类型
        content-type: text/html;charset=utf-8
    #是否允许mvc使用freemarker
        enabled: true
    #是否开启template caching
        cache: false
    #设定模板的加载路径,多个以逗号分隔,默认: [“classpath:/templates/”]
        template-loader-path: classpath:/templates/
    #设定Template的编码
        charset: UTF-8
      # 设置静态文件路径,js,css等
      mvc:
    static-path-pattern: /static/**


      

  2.3 编写模板文件*.ftl(当做jsp使用即可)


  

  2.4 访问控制器后进行页面跳转
      

3. freemarker常用语法


  3.1 取值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>Hello ${userName},Welcome to Freemarker!!!</h1>
</body>
</html>


    注1:freemarker如果取值为空,是会报错, 所以要对可能为空的值要进行处理, 方案有两种:

   1. 提供默认值
       ${name!}或${name!'未知'}  !后面就是默认值
    2. 对null值先进行判断
           
           1)exists用在逻辑判断;
        <#if name?exists>
        ${name}
       </#if> 
 

           2)if_exists用来打印东西
           ${name?if_exists}
  
 
           3)??是判断对象是否为空
       <#if name??>
        ${name}
       </#if>

代码案例:

<h2>1.exists用在逻辑判断</h2>
<#if userName?exists>
    ${userName}
<#else>
    不存在
</#if>
<h2>2.if_exists用来打印东西</h2>
${userName?if_exists}
<h2>3.??是判断对象是否为空</h2>
<#if userName??>
    ${userName}
</#if>

   3.2 条件
 

<#if sex=="女">
    今天是个好日子
<#elseif sex=="男">
    男
<#else>
    保密
</#if>

   3.3 循环


        <#list friends as item>  
        姓名:${item.name} , 年龄${item.age}  
    </#list>

   3.4 include


    <#include "/header.ftl" >

   3.5 局部变量(assign)/全局变量(global)

        <#assign ctx>
        ${springMacroRequestContext.contextPath}
        </#assign>
     
        <#global ctx>
        ...
        </#global>

  注:
     1)${springMacroRequestContext.contextPath}:SpringBoot中获取项目名
     2) 不推荐使用全局变量。即便它们属于不同的命名空间, 全局变量也被所有模板共享,因为它们是被 import进来的。

 

4. yml的介绍

   YAML(Yet Another Markup Language)一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言
   基本语法
   1 不同“等级” 用冒号隔开
   2 次等级的前面是空格,不能使用制表符(tab)
   3 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着  

下面这个是我的yml文件的配置:

server:
  port: 8080
  servlet:
    context-path: /springboot02
spring:
    datasource:
      #1.JDBC
      type: com.zaxxer.hikari.HikariDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/t277?useUnicode=true&characterEncoding=utf8&useSSL=false
      username: root
      password: 1234
    freemarker:
      #指定HttpServletRequest的属性是否可以覆盖controller的model的同名项
      allow-request-override: false
      #req访问request
      request-context-attribute: req
      #后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.html
      suffix: .ftl
      #设置响应的内容类型
      content-type: text/html;charset=utf-8
      #是否允许mvc使用freemarker
      enabled: true
      #是否开启template caching
      cache: false
      #设定模板的加载路径,多个以逗号分隔,默认: [“classpath:/templates/”]
      template-loader-path: classpath:/templates/
      #设定Template的编码
      charset: UTF-8
    # 设置静态文件路径,js,css等
    mvc:
      static-path-pattern: /static/**
logging:
  level:
    com.zking.spbootmp. mapper : debug

 

"freemarker"和"jsp"的区别和联系有:

一、jsp

优点:

1、功能强大,可以写java代码

2、支持jsp标签(jsp tag)

3、支持表达式语言(el)

4、官方标准,用户群广,丰富的第三方jsp标签库

5、性能良好。jsp编译成class文件执行,有很好的性能表现

缺点:

jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

二、freemarker

优点:

1、不能编写java代码,可以实现严格的mvc分离

2、性能非常不错

3、对jsp标签支持良好

4、内置大量常用功能,使用非常方便

5、宏定义(类似jsp标签)非常方便

6、使用表达式语言

缺点:

1、不是官方标准

2、用户群体和第三方标签库没有jsp多

选择freemarker的原因:

1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。

2、宏定义比jsp tag方便

3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便

4、支持jsp标签

5、可以实现严格的mvc分离

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

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

相关文章

超赞:不愧是“阿里内部Redis学习笔记”从头到尾,全是精华

近几年&#xff0c;随着移动互联网的飞速发展&#xff0c;我们享受着整个社会的技术进步带来的便利&#xff0c;但同时也给从业者带来了如何保证项目的高并发、低延时的技术挑战&#xff0c;相应的互联网技术也随之发生了重大变革&#xff0c;NoSQL技术得到了蓬勃的发展。 Red…

【JavaSE】抽象类与接口

文章目录抽象类的概念抽象类的语法抽象类的特性接口的概念接口的语法接口的特性多接口的实现接口的继承抽象类的概念 什么是抽象类呢&#xff1f;我们先来看一个例子&#xff1a;一个父类是动物类&#xff0c;两个子类一个狗狗类&#xff0c;一个猫猫类。 Animal中有一个dark…

有趣的statement stack

引子 在使用events_statements_current的过程中发现&#xff0c;同一线程在同一时刻&#xff0c;可能有多条记录&#xff0c;与直观感觉不太一样&#xff0c;于是跟踪了一下内部实现&#xff0c;有了本文。 STATEMENT STACK的定义 STATEMENT STACK 是events_statements_curr…

Linux基础内容(11)—— 进程理解

目录 1.进程状态 1.只针对操作系统的宏观概念 2.Linux的进程状态 1.运行状态(R) 2.休眠状态(S) 3.暂停状态/浅度睡眠状态(T) 4.深度睡眠状态(D) 5.当前进程正在被追踪(t) 6.死亡状态(X) 7.僵尸状态(Z) 8.孤儿进程 2.进程的优先级 1.优先级定义 2.Linux的优先级表现…

matlab 小数据法求liyapunov指数

1、内容简介 略 625-可以交流、咨询、答疑 2、内容说明 摘 要&#xff1a;从 Lyapunov 指数的定义出发&#xff1a;在常用计算最大 Lyapunov 指数的基础上&#xff0c;将自相关法和 G-P 法应用于小数 据量法中&#xff0c;得到了一种计算最大 Lyapunov 指数的改进小数据量法…

推特的算法规则你知道多少?

如果玩Twitter却不明白Twitter算法是如何运作的&#xff0c;就如同贸然出征却忘了带上武器。 社交媒体的算法正在成为你在平台中所见内容的核心&#xff0c;当知晓了该平台的推荐算法&#xff0c;自然也就知道发布什么样的内容有助于被更多用户看到。因此&#xff0c;了解了算…

Spring之依赖注入

文章目录前言一、set注入1.1 UserDao类&#xff1a;1.2 UserService类&#xff1a;1.3 spring.xml配置文件&#xff1a;1.4 测试类&#xff1a;1.5 执行结果&#xff1a;二、构造方法注入2.1 UserDao2.2 UserService类&#xff1a;1.3 spring.xml配置文件&#xff1a;2.4 测试类…

微服务改造过程中那些必须重视的问题

“微服务”近几年尤其火热&#xff0c;各大厂都在进行微服务化改造和微服务建设&#xff0c;想享受微服务化带来的好处以便对自己的系统进行改造。分布式实验室特约记者李鹏采访了广州轻阅科技系统架构师陈珙&#xff0c;就微服务与SOA的区别与联系、企业引入微服务会带来的问题…

Vue2:官方路由 Vue-Router 3.x

前端路由 前端路由&#xff1a;根据不同的url地址&#xff0c;页面上展示不同的内容&#xff08;根据url地址的不同分发到不同的组件。&#xff09; SPA 介绍 spa 是 single page application 简写&#xff0c;意思是单页面应用程序。Vue 适合开发 spa 类型的项目。 优点&…

Django 所带的用户auth_user的坑点,authenticate()校验一直为None,校验与创建所遇到的问题整理与解决

整理一下django中用户模块自定义model后登录的一些问题&#xff1a; 网上的报错解决不是万能方案&#xff0c;主要还是要自主分析原因&#xff0c;有的是有用但是导包之类的也要看清楚因为自己修改了所以有所变得&#xff0c;不自定义的话又不太好用。 在项目初期决定使用auth…

鸡卵白蛋白偶联脂多糖(OVA-LPS),麻黄多糖修饰卵白蛋白(PB-OVA)

产品名称&#xff1a;鸡卵白蛋白偶联脂多糖 英文名称&#xff1a;OVA-LPS 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 脂多糖&#xff08;Lipopolysacchar…

第四站:数组

目录 一、一维数组的创建和初始化 1.数组的创建 &#xff08;1&#xff09;基本定义&#xff0c;创建方式 &#xff08;2&#xff09;经典的错误标准的零分 2.数组的初始化 3.一维数组的使用 4.一维数组在内存中的存储 二、二维数组的创建和初始化 1.二维数组的创建 2…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.2 松散绑定

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.2 松散绑定2.2.1 问题引入2.2.2 松散绑定2.2.3 小结2 配…

MySQL学习笔记:模型2

序言 《MySQL45讲》 为什么表数据删除一半&#xff0c;表文件大小不变&#xff1f; 表数据既可以存在共享表空间里&#xff0c;也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的&#xff1a; 这个参数设置为 OFF 表示的是&#xff0c;表的数据放在系统共…

错字修改 | 布署1个中文文文本拼蟹纠错模型

内容一览&#xff1a;中文文本错误的种类之一为拼写错误&#xff0c;本篇文章为利用 BART 预训练方法实现中文文本纠错功能的模型部署教程。 关键词&#xff1a;BART 中文拼写纠错 NLP 本文首发自微信公众号&#xff1a;HyperAI超神经 中文文本错误3大障碍&#xff1a;拼写、语…

Chapter9.1:线性系统的状态空间分析与综合(上)

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选&#xff0c;仅包含部分经典习题&#xff0c;需要完整版习题答案请自行查找&#xff0c;本系列属于知识点巩固部分&#xff0c;搭配如下几个系列进行学习&#xff0c;可用于期末考试和考研复习。 自动控制原理(…

第六节.常用Linux命令—chmod修改目录权限,组管理,用户管理

第六节.常用Linux命令—chmod修改目录权限&#xff0c;组管理&#xff0c;用户管理 1. chmod&#xff1a;可以修改用户/文件/目录的权限 1).命令格式: chmod(代表增加权限)/-(代表减少权限) r(可读权限)w(可写权限)x(可执行权限) 文件名/目录名 2.组管理&#xff1a; 1).终端…

年产5000吨饼干食品加工厂的工艺设计

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1概述 1 1.2饼干的特点 1 1.2.1适宜大规模生产 1 1.2.2容易消化吸收 1 1.2.3食用方便 1 1.2.4营养价值高 2 1.3设计依据 2 1.4 设计范围 2 1.4.1 一般部分 2 1.4.2 重点部分 2 1.4.3 图纸 3 1.5设计指导思想 3 1.5.1 指导思想 3 1.5.…

org.activiti.validation.validator

org.activiti.validation.validator目录概述需求&#xff1a;设计思路实现思路分析1.ActivitiEventListenerValidator3.AssociationValidator4.validateAtLeastOneExecutable5.DataObjectValidator拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for im…

【信号和槽】

前言 信号和槽是QT界面框架的一个核心特性&#xff0c;其重要性和MFC的消息映射机制一样。只要用QT开发项目&#xff0c;就一定会用到&#xff0c;所以必须100%熟练掌握&#xff0c;烂熟于心。 0x0 需要理解的概念 信号&#xff1a;特定情况下被发射的事件。鼠标单击按钮&…