Jsp--EL表达式
EL的作用
EL(Expression Language)是一门表达式语言,替换Java脚本<%=…%>。
<%= %> 有以下问题
- 如果获取到数据null, 直接null在页面显示
- 获取域中的数据, 必须通过域对象.方法获取
- 需要进行逻辑判断
- 代码不美观,非Java人员不方便交流
注意:EL对null进行处理, 如果是null,不显示
EL的格式
格式:${…}
例如:${1 + 2}
关闭EL
如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。
empty运算符(是否为空)
${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。(存在返回false)
empty还可以与not或!一起使用。${not empty “”}
empty()函数内的变量在以下情况会返回true:
- 1)布尔值false;
- 2) 整型值0;
- 3) 浮点型值0.0;
- 4)空白字符串;
- 5)字符串‘0’;
- 6)array()空数组。
- 7)特殊数据类型NULL。
- 8)没有任何属性的对象。
- 9)没有赋值的变量。
EL表达式的内置对象:
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
- pageScope page域
- requestScope request域
- sessionScope session域
- applicationScope application域
- param; 获取请求参数 一个name 一个值
- paramValues; 获取请求参数, String[ ] 一个name对应多个值
- header; 获取请求头的属性
- headerValues; 获取请求的属性, 一个属性名对应多个值
- initParam; 获取初始化参数
- cookie; 获取cookie
- pageContext; 一个抵10个, 获取真实的request对象,response对象,...(可拿到所有的对象)
EL 最常用的,就是获取域中的数据, ${属性名}前面的requestScope(域对象)可以省略
1) 获取域中的数据 (重点)***
获取指定域中的数据: 域内置对象.属性名
全域查找: ${属性名}从域的小范围到大范围
首先从page域查找, 如果page域找到, 直接返回page域的数据
如果page域没有, 去request域查找, 如果找到, 返回request域的数据
如果request域没有, 去session域查找, 如果找到, 返回session域的数据
如果session域没有, 去application域查找, 如果找到, 返回application域的数据
如果application域没有, 返回null null不显示
2)请求参数相关内置对象
param:Map<String,String>类型,与request.getParameter()方法相同。
paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时(例:复选框)
3)请求头相关内置对象
header: Map<String,String>类型,用来获取请求头。
headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值
4)应用初始化参数相关内置对象
initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。
<!--初始化参数--> <context-param> <param-name>encoder</param-name> <param-value>UTF-8</param-value> </context-param>
5)Cookie相关内置对象
cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
6)pageContext对象
常用方法:${pageContext.request.contextPath} 获取项目名
等同于<%=request.getContextPath() %>