JavaEE--EL表达式(六)

一、EL表达式

1. EL简介:

表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。

2. EL有以下几个特点:

EL可以与JSTL结合使用,也可以与JavaScript语句结合使用;
EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值的和,可以直接通过”+”号进行连接,如${num1+num2};
EL不仅可以访问一般变量,还可以访问JavaBean中的属性以及嵌套属性和集合对象;
在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他内置对象);
在使用EL进行除法运算时,如果除数为0,则返回无穷大Infinity,而不是错误;
在EL中可以访问JSP的作用域(request、session、application以及page);
扩展函数可以与Java类的静态方法进行映射。

3. 与低版本的环境兼容——禁用EL

目前只要安装的Web服务器能够支持Servlet 2.4/JSP 2.0,就可以在JSP页面中直接使用EL。由于在JSP2.0以前版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。有以下三种方法:
1)、使用斜杠”\”
只需要在EL的起始标记“$”前加上”\”即可;
2)、使用page指令
使用JSP的page指令也可以禁用EL表达式,语法格式如下;
<%@ page isELIgnored=”布尔值”%> true为禁用EL
3)、在web.xml文件中配置元素

  
         
              *.jsp  
              true  
         
 

二、EL的语法

${  EL exprission }
${  bean.name } 或  ${  bean['name'] }
<%@ page isELIgnored ="true|false" %>

三、EL运算符

算术运算符有五个:+、-、*或$、/或div、%或mod
关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
逻辑运算符有三个:&&或and、||或or、!或not
其它运算符有三个:Empty运算符、条件运算符、()运算符

1、通过EL访问数据

  通过EL提供的”[]”和”.”运算符可以访问数据。通常情况下这两个运算符是等价的,可以相互代替。
  但也不是所有情况下都可以相互代替,例如当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用[]来访问对喜爱那个的属性。例如{userInfo.user-name}是错误的。
下面给出通过这两运算符访问数据的例子:

1)、获取数组元素(只能使用[],不能用.)
<%  
       String[] str = {"一号" , "二号" , "三号" , "四号" , "五号"};  
       request.setAttribute("user",str);  
  
%>  
<%  
       String[] str1 =(String[])request.getAttribute("user");  
       for(int i=0; i < str1.length; i++){  
              request.setAttribute("rt",i);  
%>  
       ${rt}: ${user[rt] }
<% }%>
2)、List集合元素的获取(只能使用[],不能用.)
<%  
       List list = newArrayList();  
       list.add("一号");  
       list.add("二号");  
       list.add("三号");  
      session.setAttribute("user",list);  
%>  
<%  
       List list1 =(List)session.getAttribute("user");  
       for(int i = 0 ; i < list1.size() ;i++){  
             request.setAttribute("rt",i);  
%>  
       ${rt}: ${user[rt] }
<% }%>

2、在EL中进行算术运算

运算符 功能 示例 结果

+   加   ${1+1}  2
-   减   ${1-1}  0
*   乘   ${2*2}  4
/或div   除   ${2/1}或${2 div 1}   2
        ${2/0}或${2 div 0}   Infinity
%或 mod  求余  ${3%2}或${3mod2} 1
        ${3%0}或${3 mod0}    异常:java.lang.ArithmeticException:/by zero

3、在EL中判断对象是否为空

  通过empty运算符实现,用来确定一个对象或比那辆是否为null或空,格式如下:

 ${empty expression}
<%request.setAttribute("user" , "");%>  
         <%request.setAttribute("user1"  , null);%>  
         <%request.setAttribute("user2"  , 2);%> 
         ${emptyuser}       //返回值为true  
         ${emptyuser1}     //返回值为true  
         ${emptyuser2}    //返回值为false  

4、在EL中进行逻辑关系运算

   在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。
<%  
       request.setAttribute("userName","张三");  
       request.setAttribute("pwd","123456");  
  
%>  
userName= ${userName }
pwd= ${pwd }
\${userName!= "" and (pwd == "asd" )} ${userName!= "" and (pwd == "asd" )}
\${userName== "张三" and pwd == "123456" } ${userName== "张三" and pwd == "123456" }

5、在EL中进行条件运算

   在EL中进行条件运算,唯一的优点在于其非常简单方便,和Java语言中的用法完全一致,其语法格式如下:
   ${条件表达式? 表达式1 : 表达式2}
   例如:${1==1 ? “对”: “错“}

6. EL的隐含对象

查找的范围从page,request,session,application

隐式对象 作用
pageContext 对应于JSP页面中的pageContext对象
pageScope 代表page域中用于保存属性的Map对象
requestScope 代表request域中用于保存属性的Map对象
sessionScope 代表session域中用于保存属性的Map对象
applicationScope 代表application域中用于保存属性的Map对象
param 表示一个保存了所有请求参数的Map对象
paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数, 返回的是一个string类型数组
header 表示一个保存了所有http请求头字段的Map对象
headerValues 表示一个保存了所有http请求头字段的Map对象,返回string类型数组
cookie 表示一个保存了所有cookie的Map对象
initParam 表示一个保存了所有web应用初始化参数的map对象
1)pageContext对象
 EL表达式中的pageContext隐式对象与JSP页面中的pageContext对象相对应,EL表达式可以通过pageContext隐式对象访问其它JSP隐式对象,如访问request、response对象属性时,可以使用表达式${pageContext.request.requestURI}

表达式${pageContext.response.contentType}等。

2)代表特定域属性的隐式对象

  EL表达式中的pageScope、requestScope、sessionScope和applicationScope四个隐式对象分别用于访问JSP页面的page、request、session、application四个域中的属性。例如,表达式{sessionScope.bookName}返回session作用域中的bookName属性的值。
  在EL表达式中也可以不使用这些隐式对象来指定查找域,而是直接引用这些域中的属性名称。例如,表达式${userName}就会在page、request、session、application这四个作用域内按顺序依次查找userName属性,直到找到为止。

3)代表请求参数的隐式对象

  EL表达式中的隐式对象param和paramValues用于获取客户端访问JSP页面时传递的请求参数的值,由于HTTP协议允许使用一个请求参数名出现多次,即一个请求参数可能会有多个值,所以,EL表达式提供了param和paramValues这两个隐式对象来分别获取请求参数的某个值和所有值。
  Param隐式对象用于返回一个请求参数的某个值,如果同一个请求参数有多个值,则返回第一个参数的值。paramValues隐式对象用于返回一个请求参数的所有值,返回结果为该参数的所有值组成的字符串数组,例如表达式${paramValues.username[0]}用于返回数组中第一个元素的值。

${param.user}
4)代表HTTP请求消息的隐式对象

  EL表达式中的隐式对象header和headerValues用于获取客户端访问JSP页面时传递的请求头字段的值。由于HTTP协议允许一些请求头字段出现多次,即一个请求头字段可能会有多个值,所以,EL表达式提供了header和headerValues两个隐式对象分别用于获取请求头字段的某个值和所有值。
  header隐式对象返回一个请求头字段的某个值,如果同一个请求头字段有多个值,则返回第一个值,例如,使用表达式${header.referer}可以非常方便的获取referer请求头字段的值。headerValues隐式对象用于返回一个请求头字段所有值组成的字符串数组。

${header[“connection”]}
5)cookie隐式对象

  EL表达式中的隐式对象cookie是一个代表所有Cookie信息的Map集合,Map集合中元素的关键字为各个Cookie的名称,值则为对应的Cookie对象。使用cookie隐式对象可以访问某个Cookie对象,这些Cookie对象则是通过调用HTTPServletRequest.getCookies()方法得到的,如果多个Cookie共用一个名称,则返回Cookie对象数组中的第一个Cookie对象。例如,要访问一个名为userName的Cookie对象,可以使用表达式${cookie.userName}。

6)initParam隐式对象

  EL表达式中的initParam是一个代表Web应用程序中的所有初始化参数的Map对象,每个初始化参数的值是ServletContext.getInitParameter(String name)方法返回的字符串。Web应用程序的初始化参数可以通过两种方式来配置,分别是在server.xml文件中配置和在web.xml文件中配置,具体如下:
(1)在server.xml文件中配置Web应用程序的初始化参数:
(2)在web.xml文件中配置Web应用程序的初始化参数:
在web.xml文件中设置一个初始化参数user:


     user
      张三

使用EL获取该参数:

     ${initParam.user}

你可能感兴趣的:(JavaEE--EL表达式(六))