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