EL表达式
1、EL简介
EL(Expression Language)它借鉴了ECMAScript和XPath的表达式语言,在早期的JSP中,为了实现动态交互作用,需要在JSP中嵌入Java代码产生了代码冗余,EL表达式解决了此问题,EL主要用于在某个作用域内获取属性值或自动判断类型转换。
2、EL语法:${EL表达式}
$和{}缺一不可,el可用.点操作符来访问对象的属性但当用属性名中包含了特殊字符如.-的情况下就不能使用点操作服了,这时用[]操作符,也可访问对象属性和数组。
3、关系操作符
关系操作符 | 说明 | 实例 | 结果 |
---|---|---|---|
==或eq | 等于 | 23 = = 5 或 {23==5}或 23==5或{23eq5} “ a ” = = ” a ” 或 {“a”==”a” }或 “a”==”a”或{“a”eq”a”} | false,true |
!=或ne | 不等于 | 23 ! = 5 或 {23!=5}或 23!=5或{23 ne 5} | true |
<或lt | 小于 | 23 < 5 或 {23<5}或 23<5或{23 lt 5} | false |
>或gt | 大于 | 23 > 5 或 {23>5}或 23>5或{23 gt 5} | true |
<=或le | 小于等于 | 23 < = 5 或 {23<=5}或 23<=5或{23 le 5} | false |
>=或ge | 大于等于 | 23 > = 5 或 {23>=5}或 23>=5或{23 ge 5} | true |
4、逻辑操作符
逻辑操作符 | 说明 | 实例 | 结果 |
---|---|---|---|
&&或and | 与 | 如A为true,B为false,则${A && B} | false |
ll双杠或or | 或 | 如A为true,B为false,则${A ll B} | true |
!或not | 非 | 如A为true,则${!A} | false |
5、Empty操作符
前缀操作符,用于检测变量值是否为null或empty,boolean类型
6、隐式对象
所谓隐式对象就是不需要声明直接用就可以,使用途径分为作用域访问,参数访问。
作用域访问,把变量放入不同作用域中满足范围的访问需求,用el访问变量时,应制定查找范围,如不指定范围,则会按照顺序依次查找。
作用域名 | 说明 |
---|---|
pageScope | 页面作用域(page)中的属性相关联的Map类 |
requestScope | 请求作用域(request)中的属性相关联的Map类 |
sessionScope | 会话作用域(session)中的属性相关联的Map类 |
applicationScope | 应用程序作用域(application)中的属性相关联的Map类 |
请求参数名称 | 说明 |
---|---|
param | 根据参数名称访问单一请求值的 |
paramValues | 根据参数名称访问数组请求值的Map对象 |
JSP隐式对象 | 说明 |
---|---|
pageContext | 提供对页面信息和JSP内置对象的访问 |
JSTL标签库
JSTL简介
JSTL(Java Server Pages Standard Tag Library)JSP标准标签库,由JCP定制的一种标准规范,可以利用这些标签取代Java代码,从而提高代码的可读性,维护性。
JSTL优点
1、简化了JSP和JavaWeb应用程序的开发。
2、在服务器之间提供了接口,提高了在各服务器之间移植。
3、减少了代码的数量,提高了代码的可读和维护性。
使用JSTL
1、引入JSTL的jar包和标签描述符.tld
2、在MyEclipse中已继承了JSTL在创建WEB项目时,在新建窗口中的J2EESpecif…选项组中选择JSTL的版本
3、在JSP页面上方使用taglib指令导入标签库
<%@ taglib prefix = “c” uri=“http://java.sun.com/jsp/jstl/core” %>
taglib指令通过uri属性引入某个标签库的配置文件,JSP通过prefix指定前缀即可访问标签库的标签功能。
JSTL核心标签库
1、通用标签库
<c:set>标签 | 标签说明 |
---|---|
<c:set> | 设置作用域变量的值或属性值 |
属性名 | 属性说明 |
var | 设置变量名 |
value | 变量的值 |
scope | 作用域范围 |
target | 操作javaBean对象的属性名,用EL表示 |
property | 对应JavaBean对象的属性值 |
<c:out>标签 | 标签说明 |
---|---|
<c:out> | 将表达式结果输出页面显示 |
属性名 | 属性说明 |
default | 指定默认值 |
value | 输出表达式的运算结果,通过EL获取 |
escapeXml | 是否转换特殊字符,true自动转换 |
<c:remove>标签 | 标签说明 |
---|---|
<c:remove> | 删除指定作用域内的变量 |
属性名 | 属性说明 |
var | 指定删除的变量名 |
scope | 删除变量的作用域范围 |
2、条件标签库
<c:if>标签 | 标签说明 |
---|---|
<c:if> | 条件判断,类似Java中的if判断,没有else |
属性名 | 属性说明 |
test | 写判断条件,可用EL表达式 |
var | 定义变量存放结果,可省略 |
scope | 指定变量的作用域范围,可省略 |
<c:choose>,<c:when>,<c:otherwise>标签
说明
<c:choose>是父标签,只能包含这两个标签
<c:when>必须有父标签,必须在的<c:otherwise>标签之前,可有多个<c:when>
<c:otherwise>必须有父标签,必须在<c:choose>标签中最后嵌套的标签
运行时,判断<c:when>标签的条件是否为true,为true的<c:when>标签被JSP容器执行,条件不满足则执行<c:otherwise>标签,此标签类似java中的if-else但是此标签编写麻烦不常用。
// 语法
<c:choose var=”varName” scope=”scope”>
<c:when test=”con”>
主体内容
</c:when>
<c:otherwise>
主体内容
</c:otherwise>
<c:choose>
3、迭代标签库
<c:forEach>双标签 | 标签说明 |
---|---|
<c:forEach> | 用于遍历集合对象的成员,是一个双标签 |
属性名 | 属性说明 |
var | 迭代参数名,自定义名称 |
items | 迭代的集合对象,可用EL从作用域中获取 |
varStatus | 迭代变量名,表示迭代的状态,分别有两个属性:count:索引从1开始,index:从0开始 |
begin | 迭代开始的位置,默认0,可省略 |
end | 迭代结束的位置,可省略 |
step | 循环步长,默认1,可省略 |
// 语法
<c:forEach var=”变量名” items=集合名” varStatus=”状态名”
begin=”开始位置” end=”结束位置” step=”循环步长” >
循环主体内容
</c:forEach>
4、JSTL其它标签
这些标签不常用,了解即可
标签名 | 标签说明 |
---|---|
<c:catch> | 处理异常,将错误信息存储起来 |
<c:import> | 检索一个绝对或相对的URL,将内容显示给页面 |
<c:forTokens> | 根据指定的分隔符来分割内容并迭代输出 |
<c:param> | 给包含或重定向的页面传递参数 |
<c:redirect> | 重定向一个新的URL |
<c:url> | 用可选的查询参数创造一个URL |
5、JSTL格式化标签
标签名 | 标签说明 |
---|---|
fmt:formatNumber | 指定的格式或精度格式化数字 |
fmt:parseNumber | 解析一个代表数字,货币或百分比 |
fmt:formatDate | 使用指定的风格或模式格式化日期 |
fmt:parseDate | 解析一个代表日期或时间的字符串 |
fmt:bundle | 绑定资源 |
fmt:setLocale | 指定地区 |
fmt:setBundle | 绑定资源 |
fmt:timeZone | 指定时区 |
fmt:setTimeZone | 复制一个时区对象至指定的作用域 |
fmt:message | 显示资源配置文件信息 |
fmt:requestEncoding | 设置request的字符编码 |
开发时,EL表达式和JSTL标签结合使用,会在很大程度上减少JSP中嵌入的java代码,有利于程序的维护和扩展。