EL&JSTL
EL
EL 概述
在 JSP 开发中,为了获取 Servlet 域对象中存储的数据,经常需要书写很多 Java 代码, 这样的做法会使 SP 页面混乱,难以维护,为此,在 JSP2.0 规范中提供了 EL 表达式。EL 是 Expression Language 的缩写,它是一种简单的数据访问语言。
EL 快速使用
由于 EL 可以简化 ISP 页面的书写,因此,在 JSP 的学习中,掌握 EL 是相当重要的。要使 用 EL 表达式,首先要学习它的语法,EL 表达式的语法非常简单,都是以“${”符号开始, 以“}”符号结束的,具体格式如下:
${}
EL 使用
演示使用 EL 表达式简化 JSP 页面的书写,新建项目,编写一个用于存储用户名和密码的 Servlet
Servlet代码
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {
request.setAttribute("username", "lisi");
request.setAttribute("password", "123456");
request.getRequestDispatcher("index.jsp").forword(request,response);
}
}
jsp页面取值
<body>
<%--
用户名:<%=request.getAttribute("username") %>
密码:<%=request.getAttribute("password") %>
--%>
<!-- 使用 EL 表达式取值 -->
用户名:${username }
密码:${password }
</body>
El语法
EL 中的标示符
每一种语言都有一套自己的语法规范,EL 表达式语言也不例外,要学会使用 EL 表达式,首 先应该熟悉它的语法。
-规范如下:
1. 不能以数字开头;
2. 不能是 EL 中的保留字,如 and、or、gt;
3. 不能是 EL 隐式对象,如 pageContext;
4. 不能包含单引号()、双引号(")、减号(-)和正斜线等特殊字符常量
EL 中的保留字
保留字就是编程语言里事先定义好并赋予了特殊含义的单词,和其他语言一样,EL 表达式 中也定义了许多保留字,这些保留字不能作为标示符
and gt true instanceof
or le false empty
not ge null div
mod
EL 表达式中的变量
EL 表达式中的变量就是一个基本的存储单元,EL 表达式可以将变量映射到一个对象上。 namename就是一个变量,EL表达中的变量不用事先定义就可以直接使用,namename就是一个变量,EL表达中的变量不用事先定义就可以直接使用,{name }就可以访 问变量 name 的值。
EL中的常量
EL 表达式中的常量又被称为字面常量,它是不能改变的数据
- 布尔常量
- 整型常量
- 浮点数常量
- 字符串常量
- Null 常量
EL 中的运算符
点运算符(.)
EL 表达式中的点运算符,用于问 JSP 页面中某些对象的属性
${user.name }
访问 user 对象中的 name 属性
方括号运算符([])
EL 表达式中的方括号运算符与点运算符的功能相同,都用于访问 JSP 页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就只能使用方括号运算符来访问该属性,其语法格式如下
user[“My−name”]访问user对象中的My−name属性−点和方括号区别1.点运算符和方括号运算符在某种情况下可以互换如user[“My−name”]访问user对象中的My−name属性−点和方括号区别1.点运算符和方括号运算符在某种情况下可以互换如{user.name} 等价于 user[“name”]2.方括号运算符和点运算符可以相互结合使用例如,表达式user[“name”]2.方括号运算符和点运算符可以相互结合使用例如,表达式{users[0].name}可以访问集合或数组中的第一个元素的 name 属性
3. 方括号运算符还可以访问 List 集合或数组中指定索引的某个元素,
如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符而不能使用点运算符
算数运算
比较运算符
逻辑运算符
EL 表达式中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍然为布 尔类型
empty 运算符
empty 运算符用于判断某个对象是否为 null 或””
emptyvaremptyvar{empty user}
条件运算符
用于执行某种条件判断,类似于 java 中的 if-else
A?B:CA?B:C{(1 == 2)? 3 : 4} 结果为 4
EL 隐式对象
在 EL 技术中,提供了隐式对象,EL 中的隐式对象共有 11 个
注意:PageContext、HttpServletRequest、HttpSession、ServletContext 这四个对 象可以存储数据,EL 表达式只能在这四个域中获取数据
注意:
- pageContext 可以获取其他 10 个隐式对象
- requestScope、sessionScope、applicationScope 是用于获取指定域的隐式对象
- param、paramValues 用于获取请求参数的隐式对象
- header、headerValues 用于获取 HTTP 请求消息头的隐式对象
- cookie 用于获取 Cookie 信息的隐式对象
- initParam 用于获取 Web 应用初始化信息的隐式对象
JSTL
JSTL概述
从 JSP11 规范开始,JSP 就支持使用自定义标签,使用自定义标签大大降低了 JSP 页面的 复杂度,同时增强了代码的重用性。为此,许多 Web 应用厂商都定制了自身应用的标签库, 然而同一功能的标签由不同的 Web 应用厂商制定可能是不同的,这就导致市面上出现了很 多功能相同的标签,令网页制作者无从选择,为了解决这个问题,Sun 公司制定了一套标准 标签库( JavaServer Pages Standard Tag Library),简称 JSTL
JSTL 虽然被称为标准标签库,而实际上这个标签库是由 5 个不同功能的标签库共同组成的。 在 JSTL 1.1 规范中,为这 5 个标签库分别指定了不同的 UR 以及建议使用的前缀,如下所 示
- Core 是一个核心标签库,它所包含应用中通用操作的标签
- I18N 是一个国际化/格式化标签库,包含实现 Web 应用程序的国际化和格式化标签
- SQL 是数据库标签库,它包含用于访问数据库和对数据库中的数据进行操作的标签
- XML 是一个操作 XML 的标签库,包含对 XML 文档中的数据进行操作的标签
JSTL 中的 Core 核心标签库
标签
Core 标签库提供了一个标签,该标签用于设置域对象属性的值,或者设置对象中用 于存储数据的 Map 对象、 JavaBean 对象属性的值。标签有 4 种语法格式
语法 1:使用 value 属性设置域对象每个属性的值
语法 2:标签体设置指定域中某个属性的值
标签
标签
标签用于指定多个条件选择的组合边界,它必须与和 标签一起使用。
标签