Page 1

JSP模板引擎

主讲 田雪松

松迪科技(北京)有限公司


模板引擎 z z

z

模板是一种固定的格式,在这种格式中,数据 是可以动态替换的。 模板引擎是将数据填入到模板中,并将它们整 合在一起,生成最终用户界面的一种界面生成 技术。 模板技术将界面与数据分离开来,它使界面设 计与程序设计分离开来,利于分工。

松迪科技(北京)有限公司


模板引擎 z

模板一般由两部分组成: – –

z

指令:指示模板如何显示数据 数据:模板中的数据

不同模板引擎的模板与数据是不同的: –

JSTL z z

FreeMarker z z

指令为自定义标签 数据则采用表达式语言 指令是以<#....>标识的一种特殊标签 数据则采用类似于表达式语言的形式,即${…}或#{…}

Velocity z z

指令通常以 #开头 数据则以$开头

松迪科技(北京)有限公司


模板引擎 z

常用模板引擎 – – –

JSTL FreeMarker Velocity

松迪科技(北京)有限公司


FreeMarker z

z

FreeMarker最初是由Benjamin Geer 和Mike Bayer 共同开发完成的,后来更多的人加入到 FreeMarker的开发中来,FreeMarker 2以后 其内核已经被完全重写。 FreeMarker的官方网站是 www.freemarker.org,目前最新版本是2.3

松迪科技(北京)有限公司


FreeMarker入门 z

先建立FTL文件,即FreeMarker的模板文件, 如下所示:

松迪科技(北京)有限公司


FreeMarker入门

松迪科技(北京)有限公司


FreeMarker入门 z z

在web程序中使用,须向web.xml注册,即 freemarker.ext.servlet.FreeMarkerServlet。 以注册Servlet的方式注册,可以使用的初始化参数, 即在init-param中使用的参数,包括: –

TemplatePath: z z z z

– – –

模板存放路径,默认为类路径的根路径 使用file://开头代表文件系统路径 使用class://开头代表类路径 否则解析为Web路径

NoCache:设置报头不缓存页面 ContentType:设置响应类型 其它: 松迪科技(北京)有限公司


FreeMarker入门 z

web.xml可按如下配置

松迪科技(北京)有限公司


FreeMarker入门 z

模板可按如下方式书写,其中的${ … }类似于 表达式语言,也需要预先存储在某一作用域中

松迪科技(北京)有限公司


FreeMarker数据 z

z

z

尽管FreeMarker的模板在取数据时使用类似于表达式 语言的语法形式,但事实上它是使用TemplateModel 存储数据的。 在Web应用中,使用FreemarkerServlet后,所有存储 于请求、会话、应用程序作用域的属性,以及通过请 求传递过来的参数都会加入到TemplateModel中,因 此可直接使用${…}取出 其使用的关键字分别是Request、Session、 Application、RequestParameters – –

注:实际是使用AllHttpScopesHashModel 在使用时,不需要对作用域做限定,它会以类似表达式语言 的方法从最小的范围找起,一直找到应用程序作用域 松迪科技(北京)有限公司


FreeMarker数据 z

FreeMarker中变量可分为三种: – – –

z

标量(Scalars):直接量 哈希表(Hashes):容器的一种,通过名称访问 序列(Sequences):容器的一种,通过索引访问

尽管在内部机制上,FreeMarker使用了所谓 对象包装,将所有数据均包装成相应的 TemplateModel,但在使用上与表达式语言类 似,均是对JavaBean的getter方法和Map的 get方法起作用。 松迪科技(北京)有限公司


模板语言 z z

通常将FreeMarker中的模板语言称为FTL,即 FreeMarker Template Language。 FTL由以下几部分组成 – – – –

文本(Text) 数据(Interpolation),即${ }或#{ } 标签(FTL Tags),即<# > …… </# > 注释(Comments),即<#-- …… --> 注意:在数据和标签中使用的字母都是大小写敏感 松迪科技(北京)有限公司


模板语言 z

在模板中插入数据有两种方法,即: – –

${……},用于字符串类型,较为通用 字符串类型 #{……}或#{expr;format},只能用于数值类型

松迪科技(北京)有限公司


模板语言 z

模板中的数据包含了一些特殊运算符: –

?运算符用于访问内置方法,例如: z

:运算符用于设置Map,例如: z

z z

<#assign list=[“name”, “age”, user.gender]> 如果用于字符串,则取字符串中的某一字符,如${user.name[0]},取第 一个字符 如果用于集合,则取子集,如${products[3..5]},取第3至5个元素

!用于设置默认值,取代了default的built-in,例如: z

<#assign map={“name”: “John”, “age”: “12”}>

[ ]用于设置集合,例如: z

${user.name?length}

${user! “Baby”},即当找不到变量user时,默认值为Baby

??用于检测变量是否存在,取代了exists的built-in 松迪科技(北京)有限公司


模板语言 z

常用FTL标签包括以下: –

– –

流程控制,如 if elseif else switch case default break 集合迭代,如 list break 设置变量assign 其它(具体请参考文档)

松迪科技(北京)有限公司

Jsp模板引擎  
Read more
Read more
Similar to
Popular now
Just for you