以下的内容有些参考书上的,有些参考网页的资料。
EL表达式的英文是Exression Language,它是JSP2.0中引入的一个新的内容,通过EL表达式,我们可以简化在JSP开发中对对象的引用,从而规范页面的代码,增加程序的可读性及维护性。
1.EL的基本语法
它是以"${"开头,以"}"结束的,中间是合法的表达式。
${expression},其中expression是用于指出要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。而且我们如果要输出一个字符串的话,我们应该把字符串放在一对单引号或者双引号内。
那我们可以怎样地访问数据了,EL还提供了[]和.两种形式的让我们去访问数据。
其实一般上这两种形式都是等价的,但是如果对象的属性名中包括了一些特殊的符号(-或者.)时,我们就只能使用"[]"来访问对象的属性了,而且"[]"还可以用来获取数据或者List集合中的数据。因为"[]"可以指定元素,但是"."不可以指定元素的。
例如我们来看看一个例子:
通过EL输出数组的全部元素。
假设我们自定义一个数组:
<%String[] arr={"java web","java","JSP"};
request.setAttribute("arr",arr);
%>
<%
String[] arr=(String[])request.getAttribute("arr");
for(int i=0;i<arr.length;i++}
{
request.setAttribute("i",i);
%>
${requestScope.i}:${requestScope.arr[i]}
<%
}
%>
**还有另一个集合的例子:
向session域中保存一个包含3个元素的List对象,并应用能够EL输出该集合的全部元素代码。
<%
List<String> list=new ArrayList<String>();
list.add("java");
list.add("java web");
list.add("JSP");
session.setAttribute("list",list);
%>
<%
List<String> list=(List<String>)session.getAttribute("list");
for(int i=0;i<list.length;i++){
request.setAttribute("i",i);
%>
${requestScope.i}:${sessionScope[i]}
<%
}
%>
由以上的代码可以知道,当我们要运用到一个数组或者一个集合,我们首先要创建一个数组或者一个集合,然后把数据添加到集合里面去,把集合保存在特定的范围里。然后再把集合或者数组中的数据拿出来,通过循环把他们显示出来。
我们应该都知道,数组的索引是从0开始的,所以我们要获取第一个元素的话,我们应该需要的索引值为0.
2.禁用EL
有些时候,一些比较低版本的浏览器会不支持EL的,此时就需要我们去禁用EL表达式。不过一般来说,都不太需要去禁用的。下面就介绍禁用EL的方法。
a. 使用斜杠"\"符号去禁用EL,有些时候,我们会不想启用EL,或者有些时候我们想输出${这个符号的话,我们就可以在${前面添加"\"这个符号,这样子就可以达到禁用页面中的某个EL表达式了。
\${name},这样子EL表达式就会直接显示在页面上,而不会输出name的值。
b. 使用page指令
<%@page isELIgnored="布尔值"%>,如果布尔值为true,那就说明了该整个页面都禁用EL表达式。
c. 在web.xml文件中配置<el-ignored>元素
如果我们想禁用服务器中的EL,我们就需要在web.xml文件中实现,其中具体代码:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
这里值得注意的是,我们再给这些变量名取名字的时候,应该尽量避免使用关键字的。其中EL的关键字有:
and eq gt instanceof div or le false empty not It ge
如果我们使用了这些关键字的话,就会出现错误的。
3.EL的特点
首先EL除了语法简单,使用方便的特点外,其实还有其他的特点:
a. EL会自动地进行类型的转换,如果想通过EL输入两个字符串型数值的和,那可以直接通过"+"来进行求和,"+"号是没有连接字符串的意思,只有加法求和的作用,但是如果两个是不能转换为数值型的字符串,就会抛出异常。
b. EL不仅可以访问一般的变量,还可以访问Javabean中的属性以及嵌套属性和集合对象。
c. 在EL中可以执行算术运算,逻辑运算,关系运算和条件运算等操作。
d. 在EL中可以获得命名空间(PageContext)对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他的内置对象。
e. 在使用EL进行出发运算的时候,如果0作为的是除数,那么就会返回无穷大Infinity,而不返回错误。
f. 扩展函数可以与java类的静态方法进行映射。
g. 在EL中可以访问JSP的作用域(request,session,application以及page)
4.变量
EL存取变量数据的方法很简单的,例如${name}这样子表示取出某一范围中名称为name的变量。
因为我们并没有指定是哪一个范围的name,所以它一般会按顺序(Page,Request,Session,Application)来寻找该变量的,如果在其中找到了该变量,那么就不会继续往下找的,但是加入全部范围里都没有找到该变量的时候,就回传null。
5.在EL中判断对象是否为空
我们可以通过empty运算符来实现的,这个运算符是一个前缀的运算符,位于操作数的前方的,用来确定一个对象或者一个变量是否为空或者null的。
例如:
<%request.setAttribue("user1","");
request.setAttribute("user2",null);%>
$(empty user1} //返回值为true
${empty user2} //返回值为true
其实,当一个对象是null或者是"",他们所表达的含义是不同的,null表示的是这个变量没有指明任何对象,而空表示的是这个变量的内容为空。