freemarker+yml介绍 以及freemarker与JSP的区别
创始人
2024-04-08 21:37:05

目录

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的依赖包
 

    org.springframework.bootspring-boot-starter-freemarker

  2.2 在springboot中添加freemarker配置

spring: freemarker:#指定HttpServletRequest的属性是否可以覆盖controller的model的同名项allow-request-override: false#req访问requestrequest-context-attribute: req#后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.htmlsuffix: .ftl#设置响应的内容类型content-type: text/html;charset=utf-8#是否允许mvc使用freemarkerenabled: true#是否开启template cachingcache: 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 取值






Hello ${userName},Welcome to Freemarker!!!


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

   1. 提供默认值
       ${name!}或${name!'未知'}  !后面就是默认值
    2. 对null值先进行判断
           
           1)exists用在逻辑判断;
        <#if name?exists>
        ${name}
        
 
           2)if_exists用来打印东西
           ${name?if_exists}
  
 
           3)??是判断对象是否为空
       <#if name??>
        ${name}
      

代码案例:

1.exists用在逻辑判断

<#if userName?exists>${userName} <#else>不存在

2.if_exists用来打印东西

${userName?if_exists}

3.??是判断对象是否为空

<#if userName??>${userName}

   3.2 条件
 

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

   3.3 循环


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

   3.4 include


    <#include "/header.ftl" >

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

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

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

 

4. yml的介绍

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

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

server:port: 8080servlet:context-path: /springboot02
spring:datasource:#1.JDBCtype: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/t277?useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: 1234freemarker:#指定HttpServletRequest的属性是否可以覆盖controller的model的同名项allow-request-override: false#req访问requestrequest-context-attribute: req#后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.htmlsuffix: .ftl#设置响应的内容类型content-type: text/html;charset=utf-8#是否允许mvc使用freemarkerenabled: true#是否开启template cachingcache: 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分离

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...