一.EL表达示
全称:ExpressionLanguage。出现意义:替代JSP中的Java表达式的。
基本语法:${EL表达式}
主要功能:
1. 获取数据
${person}:会调用pageContext.findAttribute方法从page、request、session、application范围内依次查找名称为person的对象。若没有打印空字符串,而不是null。
EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
? ${user.address.city}
? ${user.list[0]}:访问有序集合某个位置的元素
? ${map.key} :获得map集合中指定key的值
2. 执行简单的数据或逻辑运算
2.1关系运算符:==、!=、>、<、>=、<=如 <c:if test=”${user1.age>=user2.age}”…
2.2 逻辑运算符:&&、||、!如<c:if test=”${!empty user && ! empty user2}” …
2.1Empty运算符:判断对象是否是空的。对于集合类型的,如果其中没有任何元素,即使集合对象本身存在不是null,也返回true。
2.3三元表达示:${user!=null?user.name : “”}。
注意:EL表达示不支持字符串链接操作、[]运算符支持索引,.运算符能搞定的,[]都能搞定呢。而有些如请求头,头名称不符合java规范的,必须使用[]
比如:${person.name}、${person[“name”]}、${person[‘name’]}
3. 获取Web开发常用对象:EL表达式有11大隐示对象
3.1 pageContext 与Jsp中的PageContext内置对象一样可以获取session等。
3.2 pageScope:page范围的Map域
3.3 requestScope
3.4 sessionScope: session范围的Map域,用法如:sessionScope.user表示获取session范围内的user引用的对象。
3.5 applicationScope:
3.6 header保存了请求头信息的Map对象。key:头名称 value:头值。如:${header['Accept-Encoding']}
3.7 headerValues
3.8 param:保存了请求参数的map对象,key请求参数名,值是传过来的参数值。如: ${paramValues.hobbys[1]}
3.9 paramValues:保存了请求参数的map对象。Key是请求参数名,值是数组如${paramValues.hobbys[1]}
3.10 cookie:保存了所有Cookie的map对象.key是cookie的name值,而value是某一个cookie对象。如:
${cookie.JSESSIONID.name}=${cookie.JSESSIONID.value}
3.11 initParam:保存了web应用中所有的初始化参数的map对象。在web.xml中所有的<context-param中配置的值。如
${initParam.encoding}
4. 调用普通Java类的静态方法
开发步骤:定义EL函数。(与自定义标签的开发步骤一致的)
a、编写一个类,有一个静态方法
b、在WEB-INF目录下,建立一个扩展名为tld的xml文件(找Tomcat中的例子),对那个静态方法进行描述
c、在JSP页面中通过taglib指令引入该tld文件
d、在EL中就可以调用那个静态方法了
二、标签:JSTL标签库core的if和foreach,标签出现的意义在于替换掉jsp中的脚本的。
注意:JSTL标签库使用前要引用标签库。下面列出两个重要的core中的标签<c:if与<c:foreach。
2.1 if:用于判断,属性有以下:
Test,必须要有,返回boolean值。Test返回true,那么主体内容显示
Var:用于存放test运算结算,true还是false的结果用引用变量保存起来.
Scope:指var存放的结果保存哪个域范围。
如:<c:iftest=”${user1.age>=user2.age}” > user1的年龄比user2大</c:if>
2.2 forEach,用于迭代,主要有以下属性:
Items:遍历的集合
Var:指向当前的元素
Begin:开始的索引
End:结束的索引
Step:步长,跳过多个元素
varStatus:该对象中保存有当前结果集的一些索引位置等信息如有:
getIndex()、getCount、isFirst()、isLast()方法。
具体如下:
<c:forEachitems="${str}"begin="1"end="10"var="num"step="3"varStatus="vs" >
${num}<br/>${vs.index%2==0?'red':'green'}
第${vs.count}次循环
</c:forEach>