在jsp开发中,为了获取Servlet域对象中存储的数据,经常要写很多java代码,这样的做法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。它是Expression Language的缩写。
{EL 表达式} 例如:{username}
EL严格区分大小写,初学者严格按规范书写,有利于养成好的编码习惯
获取对象的属性,例如:${news.title}
获取对象的属性,例如:{news["title"]} 获取集合中的对象,例如:
为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法
关系运算符 | 范例 | 结果 |
---|---|---|
== 或 eq | ${5 == 5}**或${5** eq 5} | true |
!= 或 ne | ${5 != 5}**或${5 ne 5}** | false |
< 或 lt | ${3 < 5}**或${3** lt 5} | true |
> 或 gt | ${3 > 5}**或{3** gt 5} | false |
<= 或 le | ${3 <= 5}**或${3 le 5}** | true |
>= 或 ge | ${3 >= 5}**或${3** ge 5} | false |
运算符 | 说明 |
---|---|
( ) | 改变执行的优先级,例如${3(4+5)} |
+,-,*,/,% | 算术运算符,例如${3+2} |
==,!=,>,>=,<,<= | 关系运算符,例如${a==b}或${a eq b} |
&&,||,! | 逻辑运算符,例如${true&&false} |
?: | 条件运算符,例如${a>b?1:2} |
empty | 用于检测变量名是否为空或者没定义或者为空字符串或者没元素的数组或者集合,是否等于NULL,例如${empty name} |
目的 简单的数据处理和取值,最常用的就是取值
<jsp:usebean id="news" class="xxxxxxx">
${news.title}
${list[0]}
${totalRecordCount/pageSize}
${username}
${news}相当于(News)request.getAttribute("news")
作用域 | Java代码取值 | EL取值 |
---|---|---|
请求作用域 | request.getAttribute("news"); | ${ requestScope.news } |
会话作用域 | session.getAttribute("username"); | ${ sessionScope.username } |
程序作用域 | application.getAttribute("count"); | ${ applicationScope.count } |
页面作用域 | pageContext.getAttribute("userNum"); | ${ pageScope.userNum } |
直接写${news}就是从小到大去找
JSP标准标签库 实现JSP页面中的逻辑控制
下载jstl.jar和standard.jar包 将这两个包复制到WEB-INF\lib目录 在JSP页面中添加指令 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
标签库名称 | 资源标示符(uri) | 前缀(prefix) |
---|---|---|
核心标签库 | http://java.sun.com/jsp/jstl/core | c |
国际化/格式化标签库 | http://java.sun.com/jsp/jstl/fmt | fmt |
XML标签库 | http://java.sun.com/jsp/jstl/xml | x |
数据库标签库 | http://java.sun.com/jsp/jstl/sql | sql |
函数标签库 | http://java.sun.com/jsp/jstl/functions | fn |
<c:out value="value" default="default" escapeXml="true|false" />
需要输出显示的表达式
默认输出显示的值
是否对输出的内容进行转义
<c:set var="name" value= "value" scope="scope" />
表示变量名称
表示变量的值
存在的作用域
<c:set value= "value" target="target" property="propertyName" />
表示属性的值
表示对象
表示对象的属性名称
<c:forEach
items="xxx"
begin="xx"
end="xx"
step="xx"
var="xx"
varStatus="xx">
属性 描述 是否必要 默认值
items 要被循环的信息 否 无
begin 开始的元素(0=第一个元素,1=第二个元素) 否 0
end 最后一个元素(0=第一个元素,1=第二个元素) 否 Last element
step 每一次迭代的步长 否 1
var 代表当前条目的变量名称 否 无
varStatus 代表循环状态的变量名称 否 无
${varStatus.index} 此项的索引,从0开始
${varStatus.count} 此项的计数序号,从1开始
${varStatus.first} 此项是否是第一项,布尔值
${varStatus.last} 此项是否是最后一项,布尔值
${varStatus.begin} 此次迭代的起始索引,对应<c:foreach>中begin属性值
${varStatus.end} 此次迭代的终止索引,对应<c:foreach>中end属性值
${varStatus.step} 此次迭代的跳跃步伐,对应<c:foreach>中step属性值
<c:if test="condition" var="varName" scope="scope">
……
</c:if>
判断的结果
判断结果存放的作用域
<c:url value="url" />
<c:param name="name" value="value"/>
参数的名称
参数的值
<c:import url="URL" />
导入资源的路径
<fmt:formatDate value="date" pattern="yyyy-MM-dd HH:mm:ss"/>
时间对象
显示格式