表达式语言语法:${}
表达式语言可以访问对象中的属性、提交的参数,进行数学运算、进行逻辑判断等。如果输出的内容为null,则会使用""空字符串表示。
表达式语言的内置对象
pageContext:javax.servlet.jsp.PageContext的一个实例,通过这个对象可以取得request,response,session等对象
pageScope,requestScope,sessionScope,applicationScope:表示从对应的pageContext,request,session,application范围内获取setAttribute()方法存储的属性。
param:用于获取请求传送过来的参数。作用相当于request的getParameter()。
paramValues:用于获取传送过来的一组参数,作用相当于request的getParameterValues()
initParam:用户获取配置的初始化参数,即配置在web.xml的<context-param>标签中的内容
EL表达式在访问对象的成员变量时用到了Java反射机制。假设request对象调用了setAttribute(“user”,user),user是一个类的实例,且该实例有name属性。那么${user.name}相当于request.getAttribute("user").getName()。通过Java反射机制,根据要获取的属性生成对应的get方法,然后使用反射机制调用get方法。
表达式语言可以访问四种范围的属性(pageContext,request,session,application),如果有多个范围设置了同样的属性,那怎么访问呢。实现本身采用了范围从小到大(pageContext—>request—>session——>application)的顺序获取相应的属性。如pageContext和request都有属性user,那么${user},将取出pageContext范围的属性,而不是request范围的属性。此时如要知道自己获取哪个范围的属性,最好加上范围的明确说明,如${pageContext.user },那么就可以明确是获取pageContext范围的user属性。
如果request对象有个list属性,保存的是一个List对象,那么${requestScope.list[i] }就可以访问集合中的第i个元素
如果reqeust对象有个map属性,保存的是一个Map对象,那么${requestScope.map[key]}就可以通过map中的key访问对应的value
运算符
算术运算符:+ 、 - 、 * 、 / 或 div 、% 或 mod
关系运算符:== 或 eq 、 != 或 ne、< or lt、> 或 gt、<= 或 le、 >= 或 ge
逻辑运算符:&& 或 and、|| 或 or、!或 not
其他运算符:empty 判断是否为null,如:${empty info},判断是否有info属性
?:三目运算符。${10 > 20 ? "大于" : "小于"}。大于则输出“大于”文本