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表达式操作对象方式

  • 操作变量和常量:name{name}、{8};
  • 操作List和数组:list[0]{list[0]}、{arr[0]};
  • 操作bean的属性:person.name{person.name}、{person[‘name’]},对应person.getName()方法;
  • 操作Map的值:map.key{map.key}、{map[‘key’]},对应map.get(key)

EL运算符

运算符 说明 范例 结果
+ ${17+5} 22
- ${17-5} 12
* ${17*5} 85
/或div 17/5{17/5}或{17 div 5} 3
%或mod 取余 KaTeX parse error: Expected '}', got 'EOF' at end of input: {17%5}或{17 mod 5} 2
==或eq 等于 5==5{5==5}或{5 eq 5} true
!=或ne 不等于 5!=5{5!=5}或{5 ne 5} false
<或lt 小于 3<5{3<5}或{3 lt 5} true
>或gt 大于 3>5{3>5}或{3 gt 5} false
<=或le 小于等于 3<=5{3<=5}或{3 le 5} true
>=或ge 大于等于 3>=5{3>=5}或{3 ge 5} false
&&或and 并且 KaTeX parse error: Expected '}', got '&' at position 6: {true&̲&false}或{true and false} false
!或not !true{!true}或{not true} false
||或or 或者 truefalse{true\|\|false}或{true or false} true
empty 是否为空 empty00trueemptynot!使{empty “”},可以判断字符串、数组、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。{not empty “”} true

EL内置对象

在EL表达式中,无需创建就可以使用的对象称之为EL隐藏(隐含、内置)对象。在EL中一共有11个隐藏对象,它们都与Map相似。其中10是Map,一个是 PageContext

参数隐藏对象

注意:这些隐藏对象都是Map类型!

  • param:param是Map<String,String>类型!param对象可以用来获取参数,与request.getParameter()方法相同

Javaweb-基于JSP的EL表达式学习笔记

注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的

  • paramValues

paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它

Javaweb-基于JSP的EL表达式学习笔记

  • header

header是Map<String,String>类型,用来获取请求头

Javaweb-基于JSP的EL表达式学习笔记

  • headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象

  • initParam:initParam是Map<String,String>类型。它对应web.xml文件中的< context-param>参数

Javaweb-基于JSP的EL表达式学习笔记

  • cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身

Javaweb-基于JSP的EL表达式学习笔记

域隐藏对象

使用EL表达式最为常用的就是获取域对象中保存的数据。例如:${pageScope.xxx},表示获取在pageContext保存的数据。当然${pageScope[‘xxx’]}是相同的

  • pageScope

    pageScope是**Map<String,Object>**类型,${pageScope.xxx}的功能相等与pageContext.getAttribute(“xxx”)。两者的区别在于,前者在数据不存在时返回空字符串,而后者返回null

Javaweb-基于JSP的EL表达式学习笔记

  • 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();