你还记得JSP里的表达式语言(EL)吗?

1.表达式语言的语法

      EL表达式以 ${ 开头,并以 } 结束。EL表达式的结构如下:
${expression}
例如,表达式x+y,可以写成:
${x+y}
      它也常用来连接两个表达式。对于一系列的表达式,它们的取值将是从左到右进行,计算结果的类型为String,并且连接在一起。加入a+b等于8,c+d等于10,那么这两个表达式的计算结果将是810:
${a+b} ${ c+d}
表达式 ${a+b}and ${c+d}的取值结果则是8and10。
(2)[ ]和 . 运算符
      EL表达式可以返回任意类型的值。如果EL表达式的结果是一个带有属性的对象,则可以利用[ ]或者.运算符来访问该属性。“[ ]”和“ . ”运算符类似:“[ ]”是比较规范 的形式,“ . ”运算符则比较快捷。
      为了访问对象的属性,可以使用以下任意一种形式:
${object[“propertyName”]}
${object.propertyName}
      但是,如果propertyName不是有效的Java变量名,只能使用[ ]运算符。例如,下面这个EL表达式就可以用来访问隐式对象标题中的HTTP标题host:
${header[“host”]}
${header.host}
      但是,要想访问accept-language标题,则只能使用“[ ]”运算符。因为accept-language不是一个合法的Java变量名。如果用“.”运算符访问它,将会导致异常。
      如果对象的属性碰巧返回带有属性的另一个对象,则既可以用“[ ]”,也可以用“ . ”运算符来访问第二个对象的属性。
(3)访问JavaBean
      利用“ . ”或“ [ ]”运算符,都可以访问bean的属性。其结构如下:
${beanName[“propertyName”]}
${beanName.propertyName}
例如,访问myBean的secret属性,使用以下表达式:
${myBean.secret}
      如果该属性是一个带属性的对象,那么同样也可以利用“ . ”或“[ ]”运算符来访问第二个对象的该属性。假如该属性是一个Map、List或者array,则可以利用和访问Map值或List成员或array元素的同样规则。

2.EL隐式对象

      在JSP页面中,可以利用JSP脚本来访问JSP隐式对象。但是,在免脚本的JSP页面中,则不可能访问这些隐式对象。EL允许通过一组它自己的隐式对象来访问不同的对象。
(1)pageContext
      pageContext对象表示当前JSP页面的javax.servlet.jsp.PageContext。它包含了所有其他的JSP隐式对象。如request、response、Out、session、application、config、PageContext、page、exception。例如,可以利用一下任意一个表达式来获取当前的ServletRequest:
$[pageContext.request}
$[pageContext[“request”]
(2)initParam
      隐式对象initParam用于获取上下文参数的值。例如,为了获取名为password的上下文参数值,可以使用以下表达式:
${initParam.password}
或者
${initParam[“password”]}
(3)param
      隐式对象param用于获取请求参数值。这个对象表示一个包含所有请求参数的Map。例如,要获取userName参数,可以使用以下任意一种表达式:
${param.userName}
${param[“userName”]}
(4)paramValues
      利用隐式对象paramValues可以获取一个请求参数的多个值。这个对象表示一个包含所有请求参数,并以参数名称作为key的Map。每个key的值是一个字符串数组,其中包含了指定参数名称的所有值。即使该参数只有一个值,它也仍然返回一个带有一个元素的数组。例如,为了获得selectedOptions参数的第一个值和第二个值,可以使用以下表达式:
$[paramValues.selectedOptions[0]}
${paramValues.selectedOptions[1]}
(5)cookie
      隐式对象cookie可以用来获取一个cookie。这个对象表示当前HttpServletRequest中所有cookie的值。例如,为了获取名为jsessionid的cookie值,要使用以下表达式:
${cookie.jsessionid.value}
为了获取jessionid cookie的路径值,要使用以下表达式:
${cookie.jsessionid.path}
(6)header
      隐式对象header表示一个包含有所有请求标题的Map。为了获取header值,要利用header名称作为key。例如,为了获取accept-language这个header值,可以使用以下表达式:
${header[“accept-language”]}
      隐式对象headerValues表示一个包含所有请求head,并以header名称作为key的Map。但是,与head不同不同的是,隐式对象headerValues返回的Map返回的是一个字符串数组。例如,为了获取标题accept-language的第一个值,要使用以下表达式:

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

(7)applicationScope、sessionScope、requestScope和pageScope
      隐式对象applicationScope用于获取应用程序范围级变量的值。加入有一个应用程序范围级变量myVar,就可以利用以下表达式来获取这个属性:
${applicationScope.myVar}
      注意,在servlet/JSP编程中,有界对象是指在以下对象中作为属性的对象:PageContext、ServletRequest、HttpSession或者ServletContext。隐式对象sessionScope、requestScope和pageScope与applicationScope相似。但是其范围分别为session、request和page。

你可能感兴趣的:(Servlet,JSP)