FreeMarker定义
FreeMarker是一款Java模板引擎,,够帮我们实现页面静态化,同时它将Java代码与网页分开,并为Java Server Pages(JSP)提供了可行的替代方案。
FreeMarker作用
模板引擎这里特指:用于Web开发的模板引擎,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,比如:网站标准的html等。
要理解FreeMarker模板引擎的作用,需要理解MVC模式,如下图所示:
M(Model模型):包含后台的事务逻辑、真正处理事务的代码和商业逻辑等;
V(View视图):是网页显示部分,这部分接受来自后台程序结果或数据进行显示;
C(Controller控制器):在视图和模型之间传递控制,并依据要求调用对应的视图显示模型返回数据;
我们平时使用JSP页面,能够在JSP页面中写Java相关逻辑,这样在View中混淆了逻辑代码,造成前后端混淆在一起,彼此职责不分明。
所以以FreeMarker为代表的Java模板引擎出现,就可以将Java代码从网页中分离出来。
使得页面设计者可以专注于版面的设计,而Java程序员可以集中精力编写复杂的代码, 从而实现前后端分离,提升工作效率。
FreeMarker语法
FreeMarker主要包含如下4大部分:
<html> <body> <#-- 注释部分 --> <br> <#-- 下面使用插值 --> <h1>Welcome ${user} !</h1> <p>We have these animals: <u1> <#-- 使用FTL指令 --> <#list animals as being> <li>${being.name} </li> <#list> <u1> </body> </html>
1)文本:直接输出的部分;
2)注释:即<#–…–>格式不会输出;
3)插值:即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出;
4)指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分;
1.条件控制语句
# 格式 <#if 条件1> ... <#ifelse 条件2> ... <#ifelse 条件3> ... <#else> ... <#/if>
2.switch case语句
<#switch name> <#case "freemarker">This is a freemarker's template.<#break> <#case "velocity">This is a velocity's template.<#break> <#default>This is a jsp's template. </#switch>
3.macro指令
<#macro mo> 定义无参数的宏macro--${name} </#macro>
示例如下:
<#macro phone> 168158168188 </#macro>
使用自定义指令
<@phone></@phone>
4.import指令
类似于java里的 import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件。
示例如下,建立commons.ftl:
<#maro cfb> QQ: 875667601 </#maro>
导入命名空间
<#-- 导入命名空间 --> <#import "commons.ftl" as common>
5.include指令
可以使用include指令在模板中插入另外一个模板,被包含的模板输出在include的位置上,像是复制进去了一样。
示例如下:
<#include "test.ftl"> <#include "test.txt">
6.assign定义变量
自定义变量assign,示例如下:
<#assign number1 = 10> <#assign number2 = 5>
7.比较运算符
!= :判断两个值是否不等. > 或 gt :判断左边值是否大于右边值 >= 或 gte :判断左边值是否大于等于右边值 < 或 lt :判断左边值是否小于右边值 <= 或 lte :判断左边值是否小于等于右边值
FreeMarker使用
下面我们在springboot项目时使用FreeMarker,整个使用流程如下:
1.添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
2.设置freemarker的配置
spring: freemarker: template-loader-path: ["classpath:/templates/"] #设置ftl文件位置,这个是默认值 cache: false #设置缓存页面,默认值 charset: utf-8 # 设置页面编码格式 check-template-location: true content-type: text/html #设置文档类型 expose-request-attributes: false #设定所有request的属性在merge到模板的时候,是否要都添加到model中. expose-session-attributes: false #设定所有HttpSession的属性在merge到模板的时候,是否要都添加到model中. request-context-attribute: rc #指定RequestContext属性的名. suffix: .ftl #设置模板后缀名
3.添加模板
<!DOCTYPE html> <html lang="en"> <body> <h1>Hello Freemarker ${name}</h1> </body> </html>
4.设置controller
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloController { @GetMapping(value = "/hello") public String hello(Model model){ model.addAttribute("name","test"); return "user/hello"; } }
5.运行效果
hello test
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》