下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Java中Web的EL表达式

作者:课课家教育     来源: http://www.kokojia.com点击数:1081发布时间: 2016-03-07 11:29:33

标签: Java语言Java程序Java对象

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

  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

赞(24)
踩(3)
分享到:
华为认证网络工程师 HCIE直播课视频教程