Java中Web的EL表达式

    作者:课课家教育更新于: 2016-03-07 11:29:33

    大神带你学编程,欢迎选课

      EL全称 Expression Language(表达式语言),是jsp2.0最重要的特性之一,可以利用EL表达式来访问应用程序中的数据,来消除jsp页面中的java脚本。

      el表达式的语法

      expression例如x+y可以写成{x+y}

      el中的关键字

      以下是el中的关键字,他们不能用做标识符:

    Java中Web的EL表达式_Java语言_Java程序_课课家

      and,eq,gt,true,instanceof,or,ne,le,false,empty,not,lt,ge,null,div,mod

      后面会对部门关键字做进一步讲述.

      运算符 [ ] 和 .

      EL表达式可以返回任意类型的数值。例如EL表达式的结果是一个带有属性的对象,则可以利用 [ ] 和 . 来访问属性值,效果完全一样,只不过 [ ] 比 . 稍微正规一点。

      eg:${object.[propertyName]} 或 ${object.propertyName}

      但是,要注意一个非常重要的“陷阱”,当属性名称不是有效的java变量名时,就只能用 [] ,而不能用 . 操作。

      eg:获取请求头中host属性的值

      ${header[host]} 或 ${header.host}这是没问题的。

      但是,当要获取accept-language属性时,就只能用 []。

      ${header[accept-language]}

      当获取到的结果仍然是一个对象时,还可以继续用 [] 或 . 来获取其中的属性。例如,利用el表达式获取servlet path

      ${pageContext[request][servletPath]} ${pageContext.request[servletPath]} ${pageContext.request.servletPath}

      获取HttpSession中的属性 ${pageCotext.session} ${pageContext.session.id}

      el表达式的取值规则

      el表达式的取值是从左到右进行的,对于expr-a[expr-b]形式的表达式,取值规则入下:

      1)先计算expr-a,得到value-a

      2)如果value-a为null,则返回null

      3)然后计算expr-b,得到value-b

      4)如果value-b为null,则返回null

      5)如果value-a为map,则查看value-b是否是map中的一个key,如果是,则返回value-a.get(value-b),若不是,则返回null

      6)如果value-a为list,或者array,则要进行如下处理

      6.a)强制将value-b转为int,若转换失败,则抛出异常。

      6.b)如果value-a.get(value-b)抛出IndexOutOfBandsException或者Array.get(value-a,value-b)抛出ArrayIndexOutBandsException,则返回null。

      6.c)否则,若value是list则返回value-a.get(value-b),若value-a是一个Array,则返回Array.get(value-a,value-b)

      7)如果value-a不是一个map,list或者array,那么,value-a必须是一个JavaBean,这时,必须强制value-b为String。如果value-b是value-a是一个可读属性,则要调用getter方法。

      EL表达式的隐式对象

      在jsp页面中,可以利用jsp脚本来方法jsp隐式对象。但是在免脚本的jsp页面中,则不可能访问这些隐式对象,EL表达式通过提供一组自己的隐式对象来访问不同的对象。

      EL表达式是隐式对象有:

      *pageContext:它与jsp中的PageContext对象相对应。

      initParam:它包含所有环境初始化参数,并用参数名作为key的map

      *param:它包含所有请求参数,并用参数名作为key的map,每一个key 的值是指定名称的第一个参数值。

      *paramValues:它包含所有请求参数,并用参数名为key的map。每个key的值是一个字符串数组,其中包含了指定参数名称的所有参数值。

      header:这是一个包含请求标题,并用标题名作为key的map。每一个key的值就是指定标题名称的第一个标题。

      headerValues:这是一个包含请求标题,并用标题名作为key的map。每个key的值是一个字符串数组,其中包含了指定标题名称的 所有参数值。

      *cookie:这是一个包含了当前请求对象中所有cookie对象的map,cookie名称就是key的名称,每一个key都映射到一个cookie对象。

      applicationScope:这个是一个包含了ServletContext对象中所有属性的map,并用属性名作为key。

      sessionScope:这是一个包含了HttpSession对象中所有属性的map,并用属性名作为key。

      requestScope:这是一个map,包含了当前HttpServletRequest对象中的所有属性,并用名称作为key。

      pageScope:这是一个map,其中包含了全页面范围的所有属性,属性名称作为key。

      下面简单介绍一下这些隐式对象。

      1)pageContext

      该隐式对象对应于jsp隐式对象中的pageContext,它是最常用的取值入口,因为其中包含了很多其他的与Servlet相关的对象,例如requst、response、out、session、application、config、page、exception等。

      我们可以像下面这样来获取request对象

      ${pageContext.request}、${pageContext[request]}

      获取请求方式或请求中的一个参数

      ${pageContext.request.method} ${pageContext[request][paramName]}

      一次类推……

      2)initParam

      该对象包含了上下文的初始参数值,即

      contextConfigLocationclasspath:spring-beans.XML classpath:spring-cxf.xml

      如果要利用initParam来获取这个初始化参数的值,是这样的

      ${initParam.contextConfigLocation}${initParam[contextConfigLocation]}

      3)param

      该对象用于获取请求参数,如果在一个请求中客户端向服务器提交了用户名和密码信息,那么就可以用下面的形式来获取

      ${param.username}/${param[password]}

      4)paramValues

      利用这个对象可以获取一个请求参数的多个值,例如多个复选框,它的返回值是一个字符串数组,若我们选中了多个用于说明爱好的复选框,则可以用下面的方式来获取这些值

      ${paramValues.hobby[0]} //第一个爱好${paramValues.hobby[1]} //第二个爱好

      5)header

      还隐身对象包含请求标题,可以用它来获取所有请求头信息

      ${header.connection}${header.host}${header[accept-language]}

      注意,前面已经说过,如果key不是一个标准的Java变量名,那么只能用[ ]来获取其对应的值,就像accept-language一样。

      6)headerValues

      同paramValues类似

      ${headerValues[accept-language][0]}

      7)cookie

      利用这个隐式对象可以获取所有cookie的值,例如

      获取jsessionid的数据

      ${cookie.jsessionid.value}${cookie.jsessionid.path}

      获取用户session数据

      ${cookie.user.name}${cookie.user.age}

      8)applicationScope、sessionScope、requestScope、pageScope

      分别用户获取ServletContext、Session、HttpServletRequest和PageContext中的数据。

      需要说明的一点是,例如,用el表达式获取name的值${name},这样写,el会先从pageScope范围找key为name的值,若没有,则会按照 requestScope->sessionScope->applicationScope来以此查找。

      EL表达式的其他运算符

      1.算数运算

      · + 加法

      · - 减法

      · * 乘法

      · / (div) 除法

      · %/mod 取余/取模

      2.逻辑运算符

      · &&/and 和

      · || / or 或

      · ! / not 非

      3.关系运算符

      · == / eq 等于

      · != / ne 不等于

      · >/gt 大于

      · · >=/ge 大于等于

      · <=/lt 小于等于

      · · <=/le 小于或等于

      4.三目运算符

      ${statement ? A : B}

      5.empty 用来检查一个值是否为null或空 ${empty x} 如果x为null或空(长度为0的字符串),则返回true,否则返回false

课课家教育

未登录