JavaWeb | 5 监听器与FreeMarker
- 监听器 Listener
- 开发监听器三要素
- 六种常用监听接口
- 内置对象监听接口
- 属性监听接口
- 项目中监听器的应用场景
- FreeMarker
- 模板引擎
- FreeMarker
- JSP与FreeMarker
- FreeMarker快速上手
- FTL取值
- if分支判断
- switch分支判断
- list迭代
- 内建函数
监听器 Listener
- 对Web应用对象的行为进行监控
- 通过Listener监听自动触发指定的功能代码
开发监听器三要素
- 实现XxxListener接口,不同接口对应不同监听对象
- 实现每个接口中独有的方法,实现触发监听的后续操作
- 在web.xml中配置
<listener>
使监听器生效
六种常用监听接口
内置对象监听接口
- ServletContextListener:监听ServletContext对象创建、销毁等操作
- HttpSessionListener:监听HttpSession对象创建、销毁等操作
- ServletrRequestListener:监听ServletRequest对象创建、销毁等操作
属性监听接口
- ServletContextAttributeListener:监听全局属性操作
- HttpSessionAttributeListener:监听用户会话属性操作
- ServletrRequestAttributeListener:监听请求属性操作
项目中监听器的应用场景
- 在线用户统计与流量分析
FreeMarker
模板引擎
- 模板引擎的目标:数据 + 模板 = 结果
- 模板引擎将数据与展现有效解耦
FreeMarker
- 免费开源的模板引擎技术(通常替代JSP出现)
- FreeMarker脚本:FreeMarker Template Language
- 提供了大量内建函数来简化开发
其他的主流模板引擎还有Java Server Page、Beetl。
JSP与FreeMarker
- | JSP | FreeMarker |
---|---|---|
官方标准 | 是 | 否 |
执行方式 | 编译型 | 解释型 |
执行效率 | 高 | 低 |
开发效率 | 低 | 高 |
扩展能力 | 弱 | 强 |
数据提取 | JSTL+EL | 内置标签 |
发展趋势 | 逐渐淘汰 | 主流应用 |
FreeMarker快速上手
FTL取值
${
属性名}
:取值,可对属性进行计算${
属性名!
默认值}
:使用默认值${
属性名?string}
:格式化输出
if分支判断
<#if 条件1>执行代码
<#elseif 条件2>执行代码
<#else>执行代码
switch分支判断
<#switch value><#case refValue1>...<#break><#case refValueN>...<#break>
<#default>...
</#switch>
list迭代
list迭代列表
<#list students as stu><li>${stu_index}-${stu.name}</li>
</#list>
list迭代Map
<#list map?keys as key>${key}:${map[key]}
</#list>
list数字序列迭代
<#list 1..20 as x><li>${x}</li>
</#list>
内建函数
函数名 | 说明 | 示例 |
---|---|---|
substring | 截取字符串 | “abcdefg”?substring(2,4) |
cap_first | 首字母大写 | “jackson”?cap_first |
index_of | 查找字符索引 | “abcdefg”?index_if(“b”) |
length | 返回字符串长度 | “abcdefg”?length |
round/floor/ceiling | 四舍五入/下取整/上取整 | pi?floor |
size | 得到集合元素总数 | students?size |
first/last | 获取第一个/最后一个元素 | student?first |
sort_by | 按某个属性对集合排序 | list?sort_by(“time”) |