EL表达式

EL表达式的作用

EL用于在不使用脚本、声明、表达式的情况下,在JSP页面中渲染数据

EL使用位置

不能用在指令中,指令在编译时候执行,EL在页面渲染时执行

如:<%@ include%>、<%@ page%>等

可用在HTML、JSP标签、JS、CSS中

EL语法

1.立即执行->在页面渲染时被JSP引擎解析执行(JSP自上而下执行)

${expr}

2.延迟执行->在JSF中使用,在JSP中合法,但是不推荐使用

#{expr}

EL表达式要在执行后产生某个值,不能在表达式中声明变量、执行赋值语句

保留关键字

true、false、null、instanceof->和Java中的关键字意思一样

empty->空返回真;非空返回假 ${empty x}

括号里是对应的操作符,可以替换使用

div( / )、mod( % )、and( && )、or( || )、not( ! )、eq( == )、ne ( != )、It( < )、gt ( > )、le( <= )、ge ( >= )

操作符优先级(自上而下)

EL表达式

字面量

EL中字符串字面量可以用 ' 或 '' 引起来

HashSet<Object>字面量:${ object.method({1,2,'three',4.00,x}) },Set中的元素用 {} 引起来

ArrayList<Object>字面量:${ object.method([1,2,'three',4.00,x]) },List中的元素用 [] 引起来

HashMap<Object,Object>字面量:${ object.method({'one':1,'two':2,'three':x,'list':[1,2.3]}) },Map中的元素用{}引起来

对象属性和方法

Student类,有一个student变量,有一个num属性,num属性提供set、get方法

可以使用${student.num}访问num属性,实际上是调用的getNum()方法

可以使用${student["num"]}访问num属性

可以直接调用对象的方法,${student.toString()}

静态字段、静态方法的访问->lang包下使用类名,其他包使用JSP的page指令导入包或者写出全限定类名

${Integer.MAX_VALUE},访问Integer类中的静态字段MAX_VALUE

${Integer.reverse(24)},访问Integer类中的静态方法reverse

lambla表达式->同java中的用法一致

${v = (a,b)->a+b;v(3,15)},最后的值是18

EL表达式中的作用域变量

JSP中的9个隐式变量:request、response、session、out、application、config、pageContext、page、exception

EL中的11个隐式变量:pageContext、pageScope、requestScope、sessionScope、applicationScope、param、paramValues、header、headerValues、cookie、initParam

隐含对象

类型

说明

PageContext

javax.servlet.ServletContext

表示此JSP的PageContext

PageScope

java.util.Map

取得Page范围的属性名称所对应的值

RequestScope

java.util.Map

取得Request范围的属性名称所对应的值

sessionScope

java.util.Map

取得Session范围的属性名称所对应的值

applicationScope

java.util.Map

取得Application范围的属性名称所对应的值

param

java.util.Map

如同ServletRequest.getParameter(String name)。返回String

paramValues

java.util.Map

如同ServletRequest.getParameterValues(String name)。返回String[]

header

java.util.Map

如同ServletRequest.getHeader(String name)。返回String

headerValues

java.util.Map

如同ServletRequest.getHeaders(String name)。返回String[]

cookie

java.util.Map

如同HttpServletRequest.getCookies()

initParam

java.util.Map

如同ServletContext.getInitParameter(String name)。返回String

EL解析变量的顺序

1.检查是否隐式变量

2.如果不是隐式变量,EL按照pageContext.getAttribute()、HttpServletRequest.getAttribute()、HttpSession.getAttribute()、ServletContext.getAttribute()的顺序检查是否有符合条件的变量名

3.如果仍未找到,则报错

集合的访问

Map,有一个map引用

${map.username} 或 ${map["username"]}

List,有一个list引用

${list[0]},注意${list.0}是错误的

EL中同样可以使用流操作,只要EL变量是Java数组或者Collection实例,但是不推荐在JSP中这样做

相关推荐