javawebel表达式语言详解.docx
《javawebel表达式语言详解.docx》由会员分享,可在线阅读,更多相关《javawebel表达式语言详解.docx(12页珍藏版)》请在冰豆网上搜索。
![javawebel表达式语言详解.docx](https://file1.bdocx.com/fileroot1/2022-11/17/1eae7eba-f891-408c-9327-cfbb9a629547/1eae7eba-f891-408c-9327-cfbb9a6295471.gif)
javawebel表达式语言详解
JavaWeb----EL(表达式语言)详解
分类:
JavaWeb2021-08-1512:
42 3019人阅读 评论(0) 收藏 举报
ExpressionLanguageJavaWebEL
JavaWeb中的EL〔表达式语言〕详解
表达式语言(ExpressionLanguage)简称EL,它是JSP2.0中引入的一个新内容。
通过EL可以简化在JSP开发中对对象的引用,从而标准页面代码,增加程序的可读性及可维护性。
EL为不熟悉Java语言页面开发的人员提供了一个开发JavaWeb应用的新途径。
下面对EL的语法、运算符及隐含对象进展详细介绍。
一、EL概述
1、EL简介
EL没出现之前,开发JavaWeb应用程序时,经常需要将大量的Java代码片段嵌入到JSP页面中,这会使页面开起来很乱,如下例子:
[php] viewplaincopyprint?
1.<%if(session.getAttribute(“username〞)!
= null){
2.
3. out.println(session.getAttribute(“username〞).toString());
4.
5.}%>
而是用EL那么只需要下面的根据代码即可实现:
${username}
通过上面的例子我们可以知道,EL表达式的语法非常简单,它以〞${〞开头,以〞}〞完毕,中间为合法的表达式,详细的语法格式为:
${expression}
expression用于指定要输出的内容,可以使字符串,也可以是由EL运算符组成的表达式。
例如在EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内:
${‘我叫小武灵灵’} 或${“我叫小武灵灵〞}
EL有以下几个特点:
∙ EL可以与JSTL结合使用,也可以与JavaScript语句结合使用;
∙EL中会自动进展类型转换。
假设想通过EL输入两个字符串型数值的和,可以直接通过〞+〞号进展连接,如${num1+num2};
∙ EL不仅可以访问一般变量,还可以访问JavaBean中的属性以及嵌套属性和集合对象;
∙在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他内置对象);
∙在使用EL进展除法运算时,假设除数为0,那么返回无穷大Infinity,而不是错误;
∙在EL中可以访问JSP的作用域(request、session、application以及page);
∙扩展函数可以与Java类的静态方法进展映射。
2、与低版本的环境兼容——禁用EL
目前只要安装的Web效劳器可以支持Servlet2.4/JSP2.0,就可以在JSP页面中直接使用EL。
由于在JSP2.0以前版本中没有EL,所以JSP为了和以前的标准兼容,还提供了禁用EL的方法。
有以下三种方法:
1)、使用斜杠〞\〞
只需要在EL的起始标记“$〞前加上〞\〞即可;
2)、使用page指令
使用JSP的page指令也可以禁用EL表达式,语法格式如下;
<%@pageisELIgnored=〞布尔值〞%> true为禁用EL
3)、在web.xml文件中配置元素
[html] viewplaincopyprint?
1.
2.
3.
4.
5. *.jsp
6.
7. true
8.
9.
10.
11.
3、保存的关键字
EL中保存的关键字如下,在为变量命名时,应该防止使用这些关键字:
and
eq
gt
instanceof
div
or
le
false
empty
not
Lt
ge
二、EL的运算符使用
EL的运算符在按照从左向右的计算原那么下,优先级如下:
1、通过EL访问数据
通过EL提供的〞[]〞和〞.〞运算符可以访问数据。
通常情况下这两个运算符是等价的,可以互相代替。
但也不是所有情况下都可以互相代替,例如当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用[]来访问对喜欢那个的属性。
例如${userInfo[user-id]}是正确的,而${userInfo.user-name}是错误的。
下面给出通过这两运算符访问数据的例子:
1)、获取数组元素(只能使用[],不能用.)
[html] viewplaincopyprint?
1.<%
2.
3. String[] str = {"一号" , "二号" , "三号" , "四号" , "五号"};
4.
5. request.setAttribute("user",str);
6.
7.%>
8.
9.<%
10.
11. String[] str1 =(String[])request.getAttribute("user");
12.
13. for(int i=0; i < ; i++){
14.
15. request.setAttribute("rt",i);
16.
17.%>
18.
19. ${rt}:
${user[rt] }
20.
21.<% }%>
2)、List集合元素的获取(只能使用[],不能用.)
[html] viewplaincopyprint?
1.<%
2.
3. List list = newArrayList();
4.
5. list.add("一号");
6.
7. list.add("二号");
8.
9. list.add("三号");
10.
11. session.setAttribute("user",list);
12.
13.%>
14.
15.<%
16.
17. List list1 =(List)session.getAttribute("user");
18.
19. for(int i = 0 ; i < () ;i++){
20.
21. request.setAttribute("rt",i);
22.
23.%>
24.
25. ${rt}:
${user[rt] }
26.
27.<% }%>
2、在EL中进展算术运算
运算符
功能
例如
结果
+
加
${1+1}
2
-
减
${1-1}
0
*
乘
${2*2}
4
/或div
除
${2/1}或${2div1}
2
${2/0}或${2div0}
Infinity
%或 mod
求余
${3%2}或${3mod2}
1
${3%0}或${3mod0}
异常:
java.lang.ArithmeticException:
/byzero
3、在EL中判断对象是否为空
通过empty运算符实现,用来确定一个对象或比那辆是否为null或空,格式如下:
${emptyexpression}
例如:
[html] viewplaincopyprint?
1.<%request.setAttribute("user" , "");%>
2.
3. <%request.setAttribute("user1" , null);%>
4.
5. <%request.setAttribute("user2" , 2);%>
6.
7. ${emptyuser} //返回值为true
8.
9. ${emptyuser1} //返回值为true
10.
11. ${emptyuser2} //返回值为false
4、在EL中进展逻辑关系运算
在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。
其使用方法都差不多,下面给出一个例子:
[html] viewplaincopyprint?
1.<%
2.
3. request.setAttribute("userName","小武");
4.
5. request.setAttribute("pwd","123456");
6.
7.%>
8.
9.userName= ${userName }
10.
11.pwd= ${pwd }
12.
13.\${userName!
= "" and (pwd == "asd" )}
14.
15.${userName!
= "" and (pwd == "asd" )}
16.
17.\${userName== "小武" and pwd == "123456" }
18.
19.${userName== "小武" and pwd == "123456" }
5、在EL中进展条件运算
在EL中进展条件运算,唯一的优点在于其非常简单方便,和Java语言中的用法完全一致,其语法格式如下:
${条件表达式?
表达式1 :
表达式2}
例如:
${1==1?
“对〞:
“错“}
三、EL的隐含对象
为了可以获得Web应用程序中的相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进展操作。
1、页面上下文对象
pageContext用于访问JSP内置对象和servletContext。
在获取到这些内置对象后,就可以获取器属性值。
这些属性与对象的gexxx()方法相对象,在使用时,去掉方法名中的get,并将首字母改为小写即可。
下面介绍如何应用页面上下文对象访问你JSP的内置对象和servletContext对象。
1)、访问request对象——${pageContext.request}
获取到request对象后,就可以通过该对象获取与客户端相关的信息。
例如要访问ge