EL表达式只是JSP中的表达式,不是一种开发语言.
基本语法:${EL基本表达式}
全名是Expression Language.EL主要作用。
1.获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式。以从各种类型的web域中检索java对象。获取数据(某个web域中的对象,访问javabean的属性,访问list集合,访问map集合,访问数组)
2.执行运算
利用EL表达式可以在JSP页面中执行一些基本的关系运算,逻辑运算和算术运算.以在JSP页面中完成一些简单的逻辑运算。例如:${user==null}
3.获取web开发常用对象
EL表达式定义了一些隐式对象。利用这些隐式对象,web开发人员可以轻松获取对web常用对象的引用,从而获取这些对象中的数据。
4.调用java方法
EL表达式允许用户开发自定义的EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
一、EL表达式只能获取四大域对象中的数据
二、数学逻辑运算符
EL表达式支持如下运算符:
关系运算符 | 说明 | 范例 | 结果 |
==或eq | 等于 | ${5==5}或${5eq5} | true |
!=或ne | 不等于 | ${5!=5}或${5ne5} | false |
<或lt | 小于 | ${5<5}或${5lt5} | false |
>或gt | 大于 | ${5>5}或${5gt5} | false |
<=或le | 小于等于 | ${5<=5}或${5le5} | true |
>=或ge | 大于等于 | ${5>=5}或${5ge5} | true |
逻辑运算符 | 说明 | 范例 | 结果 |
&&或and | 交集 | ${A&&B}或${A and B} | true/false |
||或or | 并集 | ${A||B}或${AorB} | true/false |
!或not | 非 | ${!A}或${not A} | true/false |
empty运算符:检查对象是否为null或'空',对于集合,即使集合本身对象不为null,没有任何元素同样为true
三元表达式:${user!=null?user.name:""}
[]和.号运算符
EL表达式不支持字符串连接操作。
三、获取JSP的内置对象(11个EL内置对象):难点,不要与JSP的内置对象和范围名称搞混
11个EL隐式对象中,其中一个是表示自身对象外,其余都是表示Map结构
EL隐含对象名称 | java类型 | 备注 |
pageContext | javax.servlet.jsp.PageContext | 与JSP内置对象中的完全相同 |
pageScope | java.util.Map | 代表PageContext页面范围域那个Map |
requestScope | java.util.Map | 代表ServletRequest请求范围域那个Map |
sessionScope | java.util.Map | 代表HttpSession会话范围域那个Map |
applicationScope | java.util.Map | 代表ServletContext应用范围域那个Map |
param | java.util.Map | 代表请求参数。key:请求参数的名称。value:请求参数的值。字符串 |
paramValues | java.util.Map | 代表请求参数。key:请求参数的名称。value:请求参数的值。字符串数组 |
header | java.util.Map | 代表请求消息头。key:头名称。value:头值,他是一个字符串 |
headerValues | java.util.Map | 代表请求消息头。key:头名称。value:头值。字符串数组 |
cookie | java.util.Map | 代表客户端提交的Cookie的Map.key:cookie的name.value:cookie对象本身 |
initParam | java.util.Map | 代表全局初始化参数(web.xml中的context-param)key:参数名称;value:参数值 |
四、调用普通类的静态方法(EL函数)
编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤):
a.编写一个普通的java类,提供一个静态方法
public class FunctionDemo {
public static String toUpperCase(String str){
return str.toUpperCase();
}
}
b.在javaWeb应用的web-info目录下建立一个后缀名为tld(taglib definition)的xml文件(参考tomcate中的示例)。具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://localhost:8080/myfn</uri>
<function><!-- 定义函数 -->
<description>转换给定英文字母字符串为大写英文字符串</description>
<name>toUpperCase</name>
<function-class>com.freesky.el.FunctionDemo</function-class>
<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature><!-- 方法签名 -->
</function>
</taglib>
c、(可选步骤)前提是把tld文件放到WEB-INF目录下。
告知应用,tld文件和tld中的uri的对应。修改web.xml,增加以下内容。
<jsp-config>
<taglib>
<taglib-uri>http://localhost:8080/myfn</taglib-uri>
<taglib-location>/WEB-INF/myfn.tld</taglib-location>
</taglib>
</jsp-config>
d.在JSP中使用
用taglib指令,引入自定义的EL函数库
<%@ taglib uri="http://localhost:8080/myfn" prefix="myfn" %>
${myfn:toUpperCase(p)}
五、SUN提供的标准函数库
JSTL标准标签库(JSP Standard Tag Libary)
***Core:核心;
**Fmt:国际化;
SQL:数据库;
XML:xml操作;
**fn:EL函数库;
导入jstl的jar包,1.1需要两个jar包standard.jar jstl.jar. 1.2只需要导入一个jar包,jstl.jar
******六、jstl中的核心标签库(替换掉jsp中java脚本)
c:if
作用:判断是否为true,如果为true,那么标签的主体内容就会显示。
属性:
test:必须的。要求必须是boolean的。支持jsp的java表达式和EL表达式
var:保存test运算结果的变量
scope:保存的域范围。默认是page;
c:forEach
遍历:数组、List、Set、Map
属性:
items:要遍历的目标对象,支持表达式;
属性:
items:要遍历的目标对象,支持表达式。
var:变量名。指向当前遍历集合中的一个元素
begin:开始遍历索引(含)
end:结束索引遍历(含)
step:步长。默认是1
varStatus:取一个名字,引用了一个对象。
该对象有以下方法:
int getIndex():获取当前记录;从0开始;
int getCount():获取当前顺序;从1开始;
boolean isFirst():是否是第一条记录;
boolean isLast():是否是最后一条记录;