原文:Small Fire · JSP 标签库 · Java 子专栏 · Small Fire 技术笔记
EL表达式
表达式语言(Expression Language,EL),EL 表达式是用 ${expression} 括起来的脚本,用来更方便的读取对象。EL 表达式主要用来读取数据,进行内容的显示。
使用 EL 表达式可以方便地获取 4 个内置对象(域)中的数据,自定义对象中的数据、提交的参数、JavaBean、甚至集合。
使用 EL 表达式可以很方便地引用一些 JavaBean 以及其属性,不会抛出 NullPointerException 之类的错误。但是,EL 表达式非常有限,它不能遍历集合,做逻辑的控制。
获取数据
运算符
算术运算符:+、-、*、/、%
比较运算符:>、<、>=、<=、==、!=
逻辑运算符:&&、||、!
空运算符:用于判断字符串、集合、数组对象是否长度为0;
- 表达式:
${empty list} - EL 三元运算符: ${empty 对象 ? 表达式1 : 表达式2}
获取值
EL 表达式只能从域对象中获取值,${域名称.键名} 从指定域中获取指定键的值。
EL 表达式从四个域中取值,就是在代替使用 PageContext 中的getAttribute 方法取值的麻烦,底层依然在使用 PageContext 中的getAttribute 方法。
使用 pageContext 的 getAttribute方法或者 findAttribute 方法从4个范围中取出数据的时候,如果指定的 key 不存在会得到 null,而使用 EL 表达式取出的时候指定的 key 不存在,页面上什么都没有。
域名称:
- pageScope -> pageContext
- requestScope -> request
- sessionScope -> session
- applicationScope -> application (ServletContext)
web 中的四个域对象(容器对象)范围:从小到大顺序:
- page < request < session < application(ServletContext)
如果不知道数据在哪个范围中,这时可以不用指定范围直接书写 key值即可 ${键名}
EL 表达式获取复杂数据
在 EL 表达式中,获取对象的属性的值的时候,其实不是在看这个对象所在的类是否有这个属性,只要这个对象所在的类中有 getXxxxx 方法,就可以使用 EL 表达式获取 Xxxx 值。
- 获取数组数据:
${arr1[3]} - 获取集合中的值:
${list[2]} - 获取自定义对象的属性值:
${object.attirbute}
JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL)是一个 JSP 标签集合,它封装了 JSP 应用的通用核心功能。
为什么要使用 JSTL:EL 表达式不够完美,需要 JSTL 的支持。JSTL 与 HTML 代码十分类似,遵循着 XML 标签语法,使用 JSTL 让 JSP 页面显得整洁,可读性非常好,重用性非常高,可以完成复杂的功能。
JSTL 支持通用的、结构化的任务,比如迭代,条件判断,XML 文档操作,国际化标签,SQL 标签。 除了这些,它还提供了一个框架来使用集成 JSTL 的自定义标签。
根据 JSTL 标签所提供的功能,可以将其分为5个类别。
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数
JSTL 使用
使用任何库,你必须在每个JSP文件中的头部包含<taglib>标签。