1、EL表达式:
- EL,Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式。EL表达式是从JSP2.0版本开始才引入的概念。
- EL表达式的基本语法形式很简单:在JSP页面的任何静态部分均可以通过${expression}的形式获取到指定表达式的值。
- 需要注意的是,EL只能从四大域中获取数据。其查找的顺序为:依次按照由小到大的范围从四大域中查找指定名称的属性值。(pageContext,request,session,applicaiton)
如:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图07.png" alt="2bdadddc38c0f04b517fd896f06564dd.png" d="14426394" s="76e_714" t="png">
a、从指定域中获取数据:
- 从pageContext依次查找到application域空间,会降低执行效率。若是某个属性确定存放在某个域属性空间中,则可以指定直接从该空间中查找。此时需要借助EL的四大与属性空间相关的内置对象:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图06.png" alt="8a2d5715229bade5ca2265ab92fbf1e7.png" d="14426395" s="917_74c" t="png">
b、访问Bean的属性:(可以多次使用点号运算符)
- EL可以通过${key.属性}的方式获取到指定对象属性值。其底层实际调用的是该对象的相应属性的get方法。
- 当然,也可以使用${key['属性']}或者是${key["属性"]}的方式获取,该方式不常用。
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图08.png" alt="08bb46877fa38f31faa5db871eb33ef5.png" d="14426396" s="908_4a5" t="png">
c、获取数组中的元素:
- EL可以通过${key的[索引]}的方式获取到指定索引的元素。不过,需要注意的是,若数组中不存在该指定索引的元素,系统不会抛出数组越界异常。
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图09.png" alt="0601404f3d5191b92812009da673979f.png" d="14426397" s="fae_a9a" t="png">
d、获取List中的元素:
- 与获取数组中的元素相同,通过${key[索引]}的方式可以获取List中的指定索引的元素。若List中不存在指定索引的元素,系统并不会抛出越界异常。(无法使用EL表达式访问Set,因为Set是无序的,没有索引的概念)
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图10.png" alt="3b7f5bff44c6571a57c4bff2b500aded.png" d="14426398" s="18a_33d" t="png">
e、获取Map中的元素:EL通过${attributeName.mapKey}的方式可以获取指定Map的指定key的值:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图11.png" alt="8236202967279a1242fd4e55d4b6f44e.png" d="14426399" s="130_ca0" t="png">
2、EL运算符:
- EL表达式可以进行各种运算,其中常用的运算符有:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图12.png" alt="05dea0d3757abbf849700caf01257614.png" d="14426400" s="27f_020" t="png">
- 除了上述运算符外,还有一个非常有用的运算符empty,其用法为${empty 变量},结果为布尔值。若变量为定义,则返回值为true;若变量为String类型,且其值为空串,则返回值为true;若变量为引用类型,且其值为null,则返回值为true;若变量为集合类型,且其不包含任何元素,则返回值为true。
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图13.png" alt="2ce943a169e642f0408c829ecf1872da.png" d="14426401" s="bb2_fbe" t="png">
3、除了和四个域属性空间相关的EL内置对象:
- 就像JSP的Java代码块以及表达式块中可以使用九个内置对象一样,EL表达式中,同样也存在有内置对象,并且存在11个内置对象。常用的内置对象,除了前面使用过的四个域属性空间相关的内置对象之外,还有如下几个:
a、pageContext:
- 该pageContext与JSP内置对象中的pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象。注意,这些对象在EL中不是内置对象。这些对象只能够通过pageContext获取。
- 在EL中直接使用${pageContext.request}即可获取request对象。当然,其底层实际调用的是pageContext.getRequest()方法。同理,也可以通过类似方法获取到其他对象。
- 在这些获取的对象中,有一个是实际工程中最常用的:${pageContext.request.contextPath},用于获取当前项目发布到服务器中的名称,一般会用在JSP页面的路径前。
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图14.png" alt="9800b27a6882f8e7c97f13d51adbf3df.png" d="14426402" s="150_db2" t="png">
- 在EL的11个内置对象中,除了pageContext外,其他10个内置内置对象,其类型均为java.util.Map类型。
b、param:
在EL中通过${param.参数名}可获取请求中的指定参数值,其底层实际调用的是:request.getParameter(),例如,提交的请求为:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" style="float:none;" title="截图15.png" alt="6d14f278dfff8181be73511400aad7cb.png" d="14426403" s="567_41e" t="png">
- 在JSP页面中通过如下方式,可获取到name参数的值为abc:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" style="float:none;" title="截图16.png" alt="82ef45129690208dcdda16cf3baf48b7.png" d="14426404" s="7a2_efb" t="png">
c、paramValues:
- 若提交的请求中同一参数具有多个值,则可通过${paramValues.参数名[索引]}获取到指定索引号的该参数值。例如,提交的请求为:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图18.png" alt="d64d9c5bcd29b22fc19426e952f2fc05.png" d="14426405" s="984_9a7" t="png">
- 在JSP页面中通过如下方式,可获取请求中的指定参数值:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图19.png" alt="bc1425c079a8d10222674ba1d72f890a.png" d="14426406" s="24f_80a" t="png">
d、如果想获取web.xml中<context-param>标签中的子标签<param-value>的内容,则可通过${initParam.<param-name>标签中的内容}进行获取:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图20.png" alt="e5008b607837964ad73aedd4ef77832b.png" d="14426407" s="24a_e11" t="png">
- 在JSP页面中通过如下方式获取:
650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H4001158-0.png" title="截图21.png" alt="f991595a936a6589359f5a28618a872a.png" d="14426408" s="a1f_a24" t="png">