EL表达式的简介:
JSP2.0后引入了一个新的功能-——表达式语言。表达式语言是一种简化数据的访问方式,使用表达式语言可以方便的获取页面中隐藏的对象和javaBeans组件,在JSP2.0中应该尽量的使用EL表达式从而减少java脚本。注:表达式语言是JSP一种重要的特性。
表达式的语言优势:
1. 提供对存储数据的简洁访问。
如果你要访问一个“作用域的对象”,name ,(先用setAttribute 存储在PageContext , HttpServletRequest,HttpSession , ServletContext) 中,然后通过 ${name},即可获得其值,获取的顺序是PageContext,HttpServletRequest,HttpSession,ServletContext ,在查找的过程中,只要找到一个不为空的 就直接返回,否则继续查找 如果没有,则直接返回null;
2. 通过了对bean属性的简洁访问。
如上面所讲,将 Person类的一个对象 tom 先setAttribute() ,然后通过${tom.name},${tom.age}既可以 获取到tom对象的名字和年龄。
3. 提供对元素集合的简洁访问。
对于 数组,List ,Map 中元素访问,只要使用${variable[indexOrKey].如果indexOrKey合法,这也可以通过bean的点号代替结合中的方括号记法。
4. 能够简洁的访问请求参数,Cookie和其他请求数据。
可以使用预定义的隐试对象来获取。
5. {}总可以插入一些简单的运算符。
6. 条件化输出。
${test?option1:option2}
7. 自动类型的转换
8. 空值替代错误信息。
JSP 表达式语言的语法和使用
语法格式
${expressionl}
其中 expressionl代表合法的EL表达式。其可以和其他的静态文本混合。
如:${90-70},${90/10}
禁止服务器解析表达式语言
在web.xml中配置 :
<jsp-config>
<display-name>
El-ignored
</dispaly-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-config>
使用转移符 :
在$前面加上\
9=\${90/10}
使用page命令:
<%@page isELEnabled="false"%>
表达式求值
运算符求值
JSP表达式提供的操作字符大部分是跟java语言的操作字符差不多:
下面是EL表达操作符:
条件求值
语法:${条件表达式?计算表达式1:计算表达式2};
如果条件表达式为true 则求值结果为表达式1的结果,如果条件表达式为false 则求值结果为求值表达式2.
访问作用域变量
如果你要访问一个“作用域的对象”,name ,(先用setAttribute 存储在PageContext , HttpServletRequest,HttpSession , ServletContext 中),然后通过 ${name},即可获得其值,获取的顺序是:PageContext,HttpServletRequest,HttpSession,ServletContext ,在查找的过程中,只要找到一个不为空的 就直接返回,否则继续查找 如果没有,则直接返回null;若HttpResquest 和Pageonetxt中都有一个同名的变量name, 如果只想区HttpResquest 中的,则可以再EL表达式中引入作用域:
${pageScope.name}; 获取的PageContext作用域中的name变量。
${requestScope.name};获取的request作用域中的name变量。
隐含变对象
jsp中共有11个隐含对象 可以分为三类:
1. pageConetxt对象,可以访问JSP中其他8个隐含对象,$(pageContext.session)获取代表页面的会话对象。
2. 用于访问环境信息的对象,共有6个:
1.param
类型 java.util.Map ,${param.name}等价于request.getParameter(name);
2.param Values
3.header
4.headerValues
5.cookie
6.initParam
隐含对象名称 | 对象类型 | 说明 |
---|---|---|
param | java.util.Map | 映射请求参数ing到单个字符串参数值,${param.name}等价于request.getParameter(name) |
param Values | java.util.Map | 映射请求参数名到字符串参数 表达式${paramValues.name}相当于request.getParameterValues(“name”) |
header | java.util.Map | 表达式${header.name}相当于request.getHeader(name); |
headerValues | java.util.Map | 表达式${headerValues.name}相当于request.getHeaderValues(name); |
cookie | java.util.Map | 表达式${cookie.name.value}返回带有特定名称的第一个Cookie值。 |
initParam | java.util.Map | 映射上下文初始化参数名称到单个值,(通过调用ServletContext.getInitparameter(String name)获得) |
3. 用于访问作用域范围的隐含对象,共4个:
隐含对象名称 | 对象类型 | 说明 |
---|---|---|
pageScope | java.util.Map | ${pageScope}访问一个JSP页面范围的对象 |
requestScope | java.util.Map | 访问一个JSP请求的范围的对象 |
sessionScope | java.util.Map | 获取访问回话对象的属性${sessionScope.name} |
appilcationScope | java.util.Map | 将应用程序的变量名映射到其值。对隐藏对象允许访问应用程序范围的对象。 |
存取运算符
EL 提供了“.”和“[]”两种运算符来存取数据,下面的两句是等效的:
name.property;
{name[property]};
[] 主要用来访问数组,列表,和其他集合,另外,一下两种情况也用到了“[]”,
1. 当存取的属性名称包含一些特殊字符,如“.”或“?” 等非字母符号的必须要用[];
2. 当要动态取属性的值时,必须要用[],因为“.”是不能动态的取值的。:${sessionScope.user[data]},其中data是一个变量。