一、表达式语言(Expression Language,EL)
EL表达式: ${表达式}
jsp表达式:<%=表达式 %>
EL基本语法:
1、"[]“和”."运算符
来访问数据。主要获取对象属性,包括JavaBean属性值、数组的元素、集合对象的元素。
对于null值直接以空字符串显示,而不是null。在运算时不会发生错误或空指针。所以使用EL不需要判断是否为null对象。
JavaBean
<!-- 这两种相同 -->
${user.name }
${user.["name"] }
数组
request.setAttribute("array", users);
${array[0] }
${array[1] }
集合:
request.setAttribute("list", users);
${list[0].name }
${list[1].name }
2、算术运算符
加、减、乘、除、取模(求余)
${13+5} <!-- 18 -->
${13-5} <!-- 7 -->
${13*5} <!-- 65 -->
${13/5} <!-- 2.6 --> <!-- ${13 div 5} -->
${13%5} <!-- 3 --> <!-- ${13 mod 5} -->
3、关系运算符
${13==5} <!-- false --> <!-- ${13 eq 5} -->
${13!=5} <!-- true --> <!-- ${13 ne 5} -->
${13<5} <!-- false --> <!-- ${13 lt 5} -->
${13>5} <!-- true --> <!-- ${13 gt 5} -->
${13<=5} <!-- false --> <!-- ${13 le 5} -->
${13>=5} <!-- true --> <!-- ${13 ge 5} -->
4、逻辑运算符
&&或and,逻辑与
||或or,逻辑或
!或not,逻辑非
5、empty运算符
判断是否为null。如A不存在,则为true。
${empty A}
6、条件运算符
${A?B:C}
EL隐含对象
EL共11个隐含对象。常见的有:pageScope、requestScope、sessionScope、applicationScope、param、paramValues。
1、与作用域相关
如没有指定作用范围,则依次page、request、session、application范围查找。若找到,直接返回,不再继续找下去。如没找到,返回空字符串
${EL隐含对象.关键字对象.属性}
或
${EL隐含对象.关键字对象}
2、与请求参数相关
${EL隐含对象.参数名}
变量 | 类型 | 作用 |
---|---|---|
pageContext | PageContextImpl | 获取jsp中的九大内置对象 |
pageScope | Map<String,Objexct> | 获取pageContext域中的数据 |
requestScope | Map<String,Objexct> | 获取Request域中的数据 |
sessionScope | Map<String,Objexct> | 获取session域中的数据 |
applicationScope | Map<String,Objexct> | 获取application域中的数据 |
param | Map<String,String> | 获取请求参数值 |
paramValues | Map<String,String> | 获取请求的多个参数值 |
header | Map<String,String> | 获取请求头的信息值 |
headerValues | Map<String,String> | 获取请求头的多个信息值 |
cookie | Map<String,Cookie> | 获取当前请求的Cookie信息 |
initParam | Map<String,String> | 获取在web.xml中配置的上下文参数 |
二、JSP标准标签库(Java Server Pages Standarded Tag Library,JSTL)
由5个不同功能的标签库组成,包括Core、I18N、XML、SQL、Functions。
1、使用taglib标记定义前缀与uri引用。
如果使用Core标签库或Functions标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
2、核心标签库之通用标签
<c:out >
<!-- 这两种相同 -->
<c:out value="value" [default="defaultValue"]/>
<c:out value="value">
defaultValue
</c:out>
<c:set>在page、request、session、application等范围内设置一个变量,以request为例。
<!-- value赋给变量varName -->
<c:set value="value" var="varName" [scope="request"]/>
<!-- 相当于<%request.setAttribute("varName", "value"); %> -->
<!-- value赋给变量target对象(JavaBean对象)的propertyName属性。如target为null或没有set方法则抛出异常-->
<c:set value="value" target="target" property="propertyName"/>
<c:remove>删除某个变量
<!-- 删除变量varName -->
<c:remove var="varName" scope="request"/>
<!-- 相当于<%request.removeAttribute("varName") %> -->
3、核心标签库之流程控制标签
<c:if>的test表达式为true,则执行主体内容。没有<c:else>标签。
<c:if test="条件表达式">
主体内容
</c:if>
<c:choose>、<c:when>、<c:otherwise>相当于if-esle语句。 <c:choose>和<c:if>可以相互嵌套使用。
<c:choose>
<c:when test="条件表达式1">
主体内容1
</c:when>
<c:when test="条件表达式2">
主体内容2
</c:when>
<c:otherwise>
表达式都不正确时执行的99主体内容
</c:otherwise>
</c:choose>
4、核心标签库之迭代标签
<c:forEach>实现for循环,相当于foreach语句。还可以指定
begin:开始位置,默认是0
end:结束位置,默认最后一个元素
step:迭代步长,默认是1
varStatus:迭代变量状态,包括count(迭代次数)、index(当前索引)、first(第一个对象)、last(最后一个对象)。
<c:forEach var="变量名" items="数组或集合对象">
循环体
</c:forEach>
<c:forTokens>用于迭代有分隔符分割的各个成员。也有begin、end、step、varStatus,用法相同。
<c:forTokens var="变量名" items="要迭代的string对象" delims="指定分隔字符串的分隔符">
循环体
</c:forTokens>
5、函数标签库
在JSP页面中调用JSTL中的函数时,需要使用EL表达式。
基本语法
${fn:函数名(参数1,参数2,…)}
以下只写函数名(参数1,参数2,…)部分。
contains函数判断string是否包含substring子字符串。如真为true,否者false。
containsIgnoreCase函数与contains相同,但不区分大小写。
contains(string, substring)
containsIgnoreCase(string, substring)
endsWith函数判断string是否以suffix字符串结尾
endsWith(string, suffix)
startsWith函数判断string是否以prefix字符串开头
startsWith(string, prefix)
indexOf函数返回substring在string中第一次出现的位置。找不到时返回-1。
indexOf(string, substring)
length函数返回集合或字符串的长度。
length(input)
replace函数将string中的beforestring,全部用afterstring替换。
replace(string, beforestring, afterstring)
join函数将array字符串数组的所有元素合并成一个字符串,并用指定分隔符separator分开
join(array, separator)
split函数将string用指定分隔符separator将string分开成一个子字符串数组。与join相反。
split(string, separator)
substring函数返回string的一个子字符串数组。
substring(string, begin, end)
toLowerCase函数将string全部转成小写。toUpperCase与之相反。
toLowerCase(string)
trim函数将string开头和结尾的空白去掉。
trim(string)