Javaweb-基于JSP的EL表达式
EL概述
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出
EL表达式的格式:${…},例如:${1+2}
在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式
如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“\”,例如:`${1+2}`
EL表达式操作对象方式
- 操作变量和常量:{8};
- 操作List和数组:{arr[0]};
- 操作bean的属性:{person[‘name’]},对应person.getName()方法;
- 操作Map的值:{map[‘key’]},对应map.get(key)
EL运算符
| 运算符 | 说明 | 范例 | 结果 |
|---|---|---|---|
| + | 加 | ${17+5} | 22 |
| - | 减 | ${17-5} | 12 |
| * | 乘 | ${17*5} | 85 |
| /或div | 除 | {17 div 5} | 3 |
| %或mod | 取余 | KaTeX parse error: Expected '}', got 'EOF' at end of input: {17%5}或{17 mod 5} | 2 |
| ==或eq | 等于 | {5 eq 5} | true |
| !=或ne | 不等于 | {5 ne 5} | false |
| <或lt | 小于 | {3 lt 5} | true |
| >或gt | 大于 | {3 gt 5} | false |
| <=或le | 小于等于 | {3 le 5} | true |
| >=或ge | 大于等于 | {3 ge 5} | false |
| &&或and | 并且 | KaTeX parse error: Expected '}', got '&' at position 6: {true&̲&false}或{true and false} | false |
| !或not | 非 | {not true} | false |
| ||或or | 或者 | {true or false} | true |
| empty | 是否为空 | {not empty “”} | true |
EL内置对象
在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似。其中10是Map,一个是 PageContext
参数隐藏对象
注意:这些隐藏对象都是Map类型!
- param:param是Map<String,String>类型!param对象可以用来获取参数,与request.getParameter()方法相同
注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的
- paramValues
paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它
- header
header是Map<String,String>类型,用来获取请求头
-
headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象
-
initParam:initParam是Map<String,String>类型。它对应web.xml文件中的< context-param>参数
- cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身
域隐藏对象
使用EL表达式最为常用的就是获取域对象中保存的数据。例如:${pageScope.xxx},表示获取在pageContext保存的数据。当然${pageScope[‘xxx’]}是相同的
-
pageScope
pageScope是**Map<String,Object>**类型,
${pageScope.xxx}的功能相等与pageContext.getAttribute(“xxx”)。两者的区别在于,前者在数据不存在时返回空字符串,而后者返回null
-
requestScope:requestScope是**Map<String, Object>**类型,装载了request对象中的所有数据
-
sessionScope:sessionScope是**Map<String, Object>**类型,装载了session对象中的所有数据;
-
applicationScope:applicationScope是**Map<String, Object>**类型,装载了application对象中的所有数据
当EL中给出的不是隐藏对象时,表示在四个域中查找数据。例如:${a},表示
-
在${pageScope.a}中查找,如果找到就返回;
-
在${requestScope}中查找,如果找到就返回;
-
在${sessionScope}中查找,如果找到就返回;
-
在${applicationScope}中查找,如果找到就返回
页面上下文隐藏对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest,可以${pageContext.request}
| Expression | 说明 |
|---|---|
| ${pageContext.request.queryString} | pageContext.getRequest().getQueryString(); |
| ${pageContext.request.requestURL} | pageContext.getRequest().getRequestURL(); |
| ${pageContext.request.contextPath} | pageContext.getRequest().getContextPath(); |
| ${pageContext.request.method} | pageContext.getRequest().getMethod(); |
| ${pageContext.request.protocol} | pageContext.getRequest().getProtocol(); |
| ${pageContext.request.remoteUser} | pageContext.getRequest().getRemoteUser(); |
| ${pageContext.request.remoteAddr} | pageContext.getRequest().getRemoteAddr(); |
| ${pageContext.session.new} | pageContext.getSession().isNew(); |
| ${pageContext.session.id} | pageContext.getSession().getId(); |
| ${pageContext.servletContext.serverInfo} | pageContext.getServletContext().getServerInfo(); |