1.EL表达式简介
EL表达式全名Expression Language,表达式语言。它可以用来在JSP页面中创建
算术表达式,也可以用来创建逻辑表达式。
2.EL表达式的基本语法:
${expr},其中$为EL语法中的输出符号,expr为EL有效表达式,它包含在一对大括号内。EL有效表达式可以包含文字、操作符、变量(对象引用)和函数调用等。
例如:${23+15.28}、${"Hello World"}
3.运算符:
EL表达式使用的运算符就是JAVA的运算符,但其拓展了另外一种表达方式:
除法:/ or div
字符串:== or eq –> equal
不等于:!= or ne not equal
小于:< or lt –> less than
大于:> or gt –> greater than
小于等于: <= or le –> less equal
大于等于:>= or ge –> greater equal
与:&& or and
或:|| or or
非:! or not
字符串是否为空:empty 等价于 “abc” != null && “abc” != “”
无论是哪种表达效果都是一样,但推荐用后者,因为JSP页面
基本结构的是HTML代码,<、>、/ 等符号有可能会产生歧义。
4.EL内置对象
回顾一下JSP的四大作用域对象:pageContext、request、session、application
共同点:都有setAttribute和getAttribute方法,EL表达式也有四个对应的内置对象:pageScope、requestScope、sessionScope、applicationScope。
应用场景之一:
<%-- 使用page取出bean --%>
${pageScope.user1}
<%-- 取出bean中的字段值 --%>
${pageScope.user1.userID}
注意:取出字段值实际上调用的是Bean中对应的get方法,比如getUserID,在EL表达式中的写法是:userID,去掉get,之后首字母小写。
这种玩法使用其余三个也是可以实现的,要注意的是 jsp:useBean的scope属性要和作用域对象对应上。
EL表达式可以直接写作用域对象的Attribute的键获取其值。就像这样:
<%
pageContext.setAttribute("id" , 1);
request.setAttribute("id" , 2);
%>
${id}
如果不指定作用域对象,会从作用域最低的对象开始搜索。
顺序:pageContext < request < session < application
但不建议这种写法,影响搜索的效率,最好是把作用域加上。
注意:EL的内置对象并不等价于JSP的作用域对象本身,仅仅是作用域相同,
它只能取到setAttribute设置的键值对,代表的也仅仅是这些键值对的集合(Map),并没有别的功能。如果要完全等价,它还有个内置对象也叫做pageContext,那个就是完全等价的。
EL表达式内置了pageContext,可以通过它来获取到JSP的几个作用域对象。
<%--通过request获取上下文路径--%>
${pageContext.request.contextPath}
${pageContext.session.id}
特点: 这些方法到EL表达式中这种写法等价于getId、getContextPath这些方法,
只是写法不一样,其实还是调用的get方法。
param:获取request对象的参数 ?id=1&username=1..
等价于request.getParameter(“id”);
paramValues: 等价于request.getParameterValues(“id”);
header:获取请求头。请求头也是键值对:
${header.Connection}
<%--遇到特殊符号时的写法(万能写法)--%>
${header['Accept-Language']}
headerValues:和paramValues差不多,但请求头里并没有重复的键,
所以没什么用。
Cookie:获取cookie值。cookie.JSESSIONID.value