【1】使用EL表达式语言的前提条件
由于在JSP 2.0以前不存在EL表达式,为和以前的代码兼容,可以采取下面三种方式来禁用EL表达式,相应的也可以采用这几种方式启用EL表达式;
① 使用斜杠”\”符号,在EL表达式前面使用斜杠,可以禁用指定EL表达式,适用于页面中EL表达式不多的情况下。例:\${expression}
② 使用page指令来禁用EL表达式。例:<%@page isELIgnored=”true|false”%>,适用于禁用整个JSP页面的表达式。
③ 采用配置文件web.xml来禁用,在web.xml文件中配置<el-ignored>元素设置为true来禁用EL表达式。例:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored><!--false表示启用EL表达式-->
</jsp-property-group>
</jsp-config>
【2】EL表达式的基本语法
EL表达式以”${“开始,以”}”结束,中间为合法的表达式。例:${experssion};使用EL表达式有以下几个特点:在EL表达式中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围集成对象,通过这个对象可以获取其它内置对象).并且EL表达不仅能够访问一般的变量,还可以访问JavaBean中的属性以及嵌套属性和集合对象,可以执行关系运算,逻辑运算和算术运算。可以结合JSTL使用,还可以与JavaScript结合使用.
【3】EL表达式的范围
EL表达式默认范围是page,未指定范围时,默认从page范围查找,依次在request,session,,application范围内查找,找到返回此对象,未找到返回null,EL表达式提供了指定范围存取的方法,在输出表达式的前面加入指定存取范围的前缀就可以指定变量的存取范围,详细表如下:
EL表达式中使用的变量范围前缀 |
||
范围 |
前缀 |
相关说明 |
page |
pageScope |
${pageScope.username}表示在page范围查找,找到返回对象否则null |
request |
requestScope |
${requestScope.username}表示在page范围查找,找到返回对象否则null |
session |
sessionScope |
${sessionScope.username}表示在page范围查找,找到返回对象否则null |
application |
applicationScope |
${applicationScope.username}表示在page范围查找,找到返回对象否则null |
【4】EL表达式运算符
① 存取数据运算符 ”[]” 和 “.”
使用 ’[]’ 运算符可以获取数组的指定元素。例如:向request域中保存一个包含4个元素的一维数组,并应用EL表达式输出数组元素代码如下:
<% String[] number={“one”,”two”,”three”,”four”};
request.setAttribute(“num”,number);
%>
${requestScope.num[2]} <!--输出数组的第三个元素three-->
使用 ’[]’ 运算符可以获取List集合中的指定元素。例如,向session域中保存一个包含三个元素的List集合对象,并应用EL表达式输出该集合的第二个元素的代码如下:
<%List List=new ArrayList();
List.add(“one”);
List.add(“two”);
List.add(“three”);
session.setAttribute(“num”,List); %>
${sessionScope.num[1]} <!--输出集合中第二个的值-->
使用 ’[]’ 运算符可以获取Map集合中的指定元素。例如,向application域中保存一个包含三个元素的Map集合对象,并应用EL表达式输出该集合的第二个元素的代码如下:<% Map mp=new HashMap();
Mp.put(“1”,”one”);
Mp.put(“2”,”two”);
Mp.put(“3”,”three”);
application.setAttribute(“num”,Mp); %>
${applicationScope.num[“1”]} <!--输出集合中”1”键所对应的值-->
empty运算符是一个前缀运算符,意思是empty运算符位于操作数的前面,用来确定一个对象或者一个变量是否为null或空,语法如:${empty expression}验证该表达式是否为空,${empty expression}验证该表达式是否不为空。并且可以用三元运算符:
${empty user ? “user empty” : user}来起到判断选择作用。
【5】EL表达式中的隐含对象表
EL表达式的隐含对象 |
|||
|
隐含对象 |
对象类型 |
说明 |
页面上下文对象 |
pageContext |
javax.servlet.jsp.PageConext |
用于访问JSP内置对象 |
访问环境信息对象 |
param |
java.util.Map |
页面所有参数的名称和对应值的集合 |
paramValues |
java.util.Map |
页面所有参数的名称和对应多个值的集合 |
|
header |
java.util.Map |
包含每个header名和值的集合 |
|
headerValues |
java.util.Map |
包含每个header名和可能的多个值集合 |
|
cookie |
java.util.Map |
包含每个cookie名和值的集合 |
|
initParam |
java.util.Map |
包含Servlet上下文初始参数名对应值集合 |
|
访问作用域范围对象 |
pageScope |
java.util.Map |
包含page(页面)范围内的属性值的集合 |
requestScope |
java.util.Map |
包含request(请求)范围内的属性值的集合 |
|
sessionScope |
java.util.Map |
包含session(会话)范围内的属性值的集合 |
|
applicationScope |
java.util.Map |
包含application(应用)范围内的属性值的集合 |
InitParam对象可以像JSP内置对象config一样获取Web应用初始化参数。如在web.xml文件中设置一个属性name,用于指定名称:
<context-param>
<param-name>name</param-name>
<param-value>ZH</param-value>
</context-param>
然后可以应用EL表达式获取该参数:${initParam.name}
小结:EL表达式主要用于JSP页面的变量获取和输出,通过使用EL表达式,减少内嵌Java代码的使用,更容易读和维护。JSP页面充当显示层,应该充分减少内嵌代码的使用,尽量使用标签。还有JSTL标签的目的也是为了减少Java代码,用标签来替代。EL表达式的目的和作用要明确,就是它输出获取的变量。