Javaweb-基于JSP的EL表达式学习笔记
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(); |