EL(Expresssion Language)表达式语言,简称为EL表达式,它是JSP2.0中引入的一种计算和输出Java对象的简单语言。主要特点:
- 在EL表达式中可以获取命名空间(pageContext对象),通过该对象可以访问JSP页面的其他内置对象
- 可以获取JavaBean的属性、数组以及集合对象的数据
- 可以执行关系、逻辑、算术等运算
- 获取page、request、session、application作用域的属性
- 自定义EL函数,调用Java类的方法
一.语法
(1).语法格式如下:
${ expression }
(2).输出$字符串
// 加上“\”符号
\$
// 输出“${}”字符串
${ "${}" }
// 输出EL表达式“${1 + 1 }”,不是结果2
\${ 1 + 1 }
二.运算符
JSP中,EL表达式提供了存取运算符、算术运算符、关系运算符、逻辑运算符、条件运算符以及Empty运算符
(1).存取运算符
存取运算符包括“.”和“[]”,用于获取对象的属性
${user.name} - ${user["name"]}
${userList.get(0).name}
(2).算术运算符
+ - * / %,用在整数和浮点数上
${"a"}${"b"} // ${"a" + "b"} 是错误的,只能用于整数、浮点数的运算
(3).关系运算符
等于(==或eq) 不等于(!=或ne) 小于(<或lt) 大于(>或gt) 大于等于(>=或ge) 小于等于(<=或le)
${1 > 2 } - ${1 lt 2 } // false - true
(4).逻辑运算符
与(&&或and)、或(||或or)、非(!或not)
${not (1 > 2) } - ${! (1 < 2)} // true - false
(5).empty运算符
前缀运算符,判断是否为null
${empty name }-${name == null} // true - true
(6).条件运算符
问号表达式
${num1 < num2 ? num1 : num2 }
三.隐含对象
EL表达式中定义了一些隐含对象,共有11个,分为以下3种:
pageContext隐含对象、访问环境信息的隐含对象、访问作用域范围的隐含对象
(1).pageContext隐含对象
该对象用于访问JSP的9大内置对象,如request、response、session、page等
// 获取应用上下文路径
${pageContext.request.contextPath} // '/项目名'
(2).访问环境信息的隐含对象
EL表达式中定义的用于访问环境信息的隐含对象包括以下6个:
- cookie:请求中的Cookie
- header:请求头,若属性中有“-”,如User-Agent,需要使用${header["User-Agent"]}获取值
- headerValues:请求头属性的Map对象,值保存在数组中
- initParam:获取上下文的初始化参数,如web.xml中<context-param>标签
- param:获取请求参数
- paramValues:请求参数的Map对象,值保存在数组中
// cookie
${cookie.JSESSIONID.name} - ${cookie.JSESSIONID.value}
// header
${header.Accept }
${header["User-Agent"] } // 使用${header.User-Agent}会报错,也就是执行了减法
// headerValues
${headerValues.Accept[0] }
${header["User-Agent"][0] }
// url为:xxx/testEl?name=aa
// param
${param.name } // aa
// paramValues
${paramValues.name[0] } // aa,返回的是String[]
// initParam
${initParam.appName}// test_servlet
web.xml配置为:
<context-param>
<param-name>appName</param-name>
<param-value>test_servlet</param-value>
</context-param>
(3).访问作用域范围的隐含对象
- pageScope:(默认),获取page域内的属性
- requestScope:获取request域中的属性
- sessionScope:获取session域中的属性
- applicationScope:获取application域中的属性
获取指定域中的属性值,若不指定哪一个范围内取值,默认从page域中查找,不存在则依次从request->session->application查找,只要查找到该属性则停止查找
// request、session中都存在name属性
${name} // 获取的是request范围的name属性
${requestScope.name}// 指定获取request域中的name属性