EL表达式基本语法
<body>
${expression}
</body>
如果要使用EL表达式,则web服务器必须支持Servlet2.4/JSP2.0,同时还要确认EL表达式没有被禁用;JSP中提供了三种禁用EL表达式的方法:
1:在EL表达式的开始标记前加上"\"符号:
<body>
\${expression}
</body>
此方法一般适合只是禁用页面的一个或多个EL表达式的情况;
2:使用page指令,其语法如下:
<%@ page isELlgnored="true|false" %>
其中isELlgnored的属性为true,则表示忽略EL表达式,否则将解析页面的EL表达式,此方法一般适合禁用一个页面的EL表达式;
3:在web.xml中配置<el-ignored>元素,其语法如下:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<!--此次设为true表示禁用EL表达式-->
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
此方法适合禁用web应用中所有的jsp页面;
在EL表达式中要输出一个字符串,可以将字符串放在一对单引号或双引号内;
EL表达式的特点:
1>:在EL表达式中可以获得命名空间(PageContext对象,它是页面中所有其它内置对象的最大范围的集成对象,通过它可以访问其它内置对象);
2>:EL表达式不仅可以访问一般变量,而且还可以访问javaBean中的属性以及嵌套属性和集合对象;
3>:在EL表达式中可以执行关系运算,逻辑运算和算术运算;
4>:扩展函数可以与java类的静态方法进行映射;
5>:在表达式中可以访问jsp的作用域(request,session,application以及page);
6>:EL表达式可以与JSTL结合使用,也可以与js语句结合使用;
EL表达式的存取范围:
当EL表达式中的变量没有指定范围时,系统默认从page范围中查找,然后依次是request、session、及application范围内查找,如果此过程中找到指定的变量,则直接返回,否则返回null,另外EL
表达式还提供了指定存取范围的方法,在要输出表达式的前面加入指定存取范围的前缀就可以指定该变量的存取范围,下面是EL表达式中用于指定变量使用范围的前缀:
1: page的前缀为pageScope;
2: request的前缀为requestScope;
3: session的前缀为sessionScope;
4: application的前缀为applicationScope;
EL表达式运算符之存取数据运算符:
在EL表达式中可以使用运算符[]和"."来取得对象的属性,例如,${user.name}或者${user[name]}都表示获取对象user中的name属性的值,通常情况下,获取指定对象的属性使用"."运算符,但是当
属性名中包含一些特殊的字符(如"."或者"_"等非字母或者数字字符)时,就只能使用[]来访问属性值,例如${user[user-name]}是正确的,${user.user-name}是错误的;
另外,在EL表达式中可以使用[]运算符来读取数组、map、List或者对象容器中的数据:
1:数组元素的获取
应用[]运算符可以获取数组指定的元素,例如在request保存水果数组:
<%
String[] arrFruit = {"苹果", "西瓜", "橘子"};
request.setAttribute("fruit", arrFruit);
%>
${requestScope.fruit[1]}
2:List集合元素的获取:
<%
List list = Arrays.asList("苹果","西瓜","橘子");
session.setAttribute("list",list);
%>
${sessionScope.list[0]}
EL表达式运算符之算术运算符:
+、-、*、/或div、%或mod
EL表达式运算符之关系运算符
==或eq, !=或ne,<或lt,>或gt,<=或le,>=或ge
在使用EL表达式关系运算符时,不能够写成${param.pwd1}=${param.pwd2}或${${param.pwd1}==${param.pwd2}},而应该写成${param.pwd1==param.pwd2};
EL表达式运算符之逻辑运算符
&&或and运算符
||或or运算符
!或not运算符
empty运算符
在EL表达式中,有一个特殊的运算符empty,该运算符是一个前缀(prefix)运算符,即empty运算符位于操作数前方,被用来确定一个对象或变量是否为null或空
empty运算符的语法格式如下:
<body>
${empty expression}
</body>
一个变量或对象为空和null是代表不同的意义,null表示这个变量没有指明任何对象,而空表示这个变量所属的对象的内容为空,如空字符串、空数组或List容器
EL表达式运算符之条件运算符
条件运算符的语法如下:
<body>
${条件表达式?计算表达式1:计算表达式2}
</body>
例如应用条件运算符,当变量user的值为空时,输出user为空,否则输出user的值:
<body>
${empty user:"user为空" : user}
</body>
EL表达式中的隐含对象
为了能够获得web应用程序中的相关数据,EL表达式中定义了一些隐含对象,分为三大类共11个:
页面上下文对象:
1:pageContext;(用于访问jsp内置对象)
访问环境信息的隐含对象:
1: param;(包含页面所有参数的名字和对应的值的集合);
2: paramValues;(包含页面所有参数的名字和对应多个值的集合);
3: header;(包含每个header名和值的集合);
4: headerValues;(包含每个header名和可能的多个值的集合);
5:cookie;(包含每个cookie名和值的集合);
6:initParam;(包含Servlet上下文初始化参数名和对应值的集合);
访问作用域范围的隐含对象
1: pageScope;(包含page(页面)范围内的属性值的集合);
2: requestScope;(包含request(请求)范围内的属性值的集合);
3: sessionScope;(包含session(会话)范围内的属性值的集合);
4: applicationScope;(包含application(应用)范围内的属性值的集合);
pageContext对象的应用
pageContext隐含对象用于访问jsp内置对象,如request,response,out,session,config和servletContext等
例如,要获取当前session(会话)中的变量username:
<body>
${PageContext.session.username}
</body>
param和paramValues对象的应用
param对象用于获取请求参数的值,而如果一个参数名对应多个值时,则需要使用paramValues对象获取请求参数的值,在应用param对象时,返回的结果为字符串,在
应用paramValues对象时,返回的结果为数组;
例如在jsp页面中放置一个名为user的文本框:
<body>
<input type="text" id="user" name="user"/>
</body>
当表单提交后,要获取user文本框的值,可以使用EL表达式:
<body>
${param.user}
</body>
如果user文本框中输入的中文,那么在用EL表达式进行输出时,首先得设置编码 request.setCharachterEncoding("GBK");
注意,在应用param或paramValues对象时,如果指定得参数不存在,则返回空字符串,而不是null
header和headerValues对象的应用
header和headerValues对象都用于获取HTTP请求的一个具体的header值,只是header获得的单个值,而headerValues获取的是一个数组;
例如,要获取HTTP请求的header的Host属性,可以使用以下EL表达式:
<body>
${header.host}或${header[host]}
</body>
但是要获取HTTP请求饿的header的user-agent属性,则必须使用下面的EL表达式:
<body>
${header["user-agent"]}
</body>
cookie对象的应用
cookie对象用于获取Cookie对象,如果在cookie中已经设定一个名称为username的值,那么可以使用${cookie.username}来获取Cookie对象,但是如果要获取cookie中的值,
需要使用Cookie对象的value属性,例如,使用response对象设置一个请求有效的Coookie对象,然后再使用EL表达式获取该Cookie对象的值:
<%
Cookie cookie = new Cookie("user","mr");
response.addCookie(cookie);
%>
${cookie.user.value}
initParam对象的应用
initParam用于获取web应用初始化参数的值,例如,在web.xml中设置一个初始化参数author:
<context-param>
<param-name>author</param-name>
<param-value>exception</param-value>
</context-param>
应用EL表达式获取该参数${initParam.author}