Web基础了解版07-EL表达式
-
-
el表达式用于代替jsp表达式(<%= %>)在页面中做输出操作。
-
el表达式出现的目的是为了使jsp写起来更加简单,让jsp的代码更佳简化。
-
el表达式仅仅用来读取数据,而不能对数据进行修改。
-
${标识符}
-
-
第二点:el表达式在域对象中搜索属性的顺序是pagecontext,request,session,application
-
获取域中的对象可以直接使用对象名,这时按照从小到大的顺序依次向上查找。如获取域中名字为user的对象
-
${user}
-
-
获取对象的属性值可以直接通过“对象.属性名”
-
-
-
比如:如果获取name属性值,那么该对象中必定要存在一个getname()方法。
-
-
获取对象的属性也可以通过“对象[“属性名”]”
-
-
-
${map.key}
-
${map[key]}
-
-
在指定域中获取属性
-
在el表达式中如果我们直接使用属性名如:${user},它将会在四个域中由小到大依次查找。顺序:pagescope、requestscope、sessionscope、applicationscope。
-
也可以指定从哪个域中获取:
-
${ pagescope .user}:当前页面
-
${requestscope.user}:当前请求
-
${sessionscope.user}:当前会话
-
-
-
说 明 | 范 例 | 结果 | |
---|---|---|---|
+ | 加法 | ${ 12 + 18 } | 30 |
- | 减法 | ${ 18 - 8 } | 10 |
* | 乘法 | ${ 12 * 12 } | 144 |
/ 或div | 除法 | ${ 144 / 12 } 或 ${ 144 div 12 } | 12 |
% 或mod | 取模 | ${ 144 % 10 } 或 ${ 144 mod 10 } |
说 明 | 范 例 | 结果 | |
---|---|---|---|
== 或 eq | 等于 | ${ 5 == 5 } 或 ${ 5 eq 5 } | true |
!= 或 ne | 不等于 | ${ 5 !=5 } 或 ${ 5 ne 5 } | false |
< 或 lt | 小于 | ${ 3 < 5 } 或 ${ 3 lt 5 } | true |
> 或 gt | 大于 | ${ 2 > 10 } 或 ${ 2 gt 10 } | false |
<= 或 le | 小于等于 | ${ 5 <= 12 } 或 ${ 5 le 12 } | true |
>= 或 ge | 大于等于 | ${ 3 >= 5 } 或 ${ 3 ge 5 } |
说 明 | 范 例 | 结果 | |
---|---|---|---|
&& 或 and | 与运算 | ${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 } | false |
|| 或 or | 或运算 | ${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 } | true |
! 或 not | 取反运算 | ${ !true } 或 ${not true } |
-
对象为null时,返回true
-
如果是空的字符串,返回true
-
如果是空的object数组(object数组.length == 0),返回true
-
空的集合,返回true
-
空的map,返回
${ 表达式1 ? 表达式2 : 表达式3 }
-
-
[] 中括号,可以获取顺序集合中指定索引的元素,也可以获取特殊key的值。
-
当我们在map对象中存放一些特殊的key的时候,比如说,key字符串中含有 “.” 、“+” 、“-” 、“*” 、“/” 、 “%” 等 这些运算符的时候,会让el解析器产生歧义的时候。我们可以使用[‘key’]中括号加引号包含key的形式取值。
-
类型 | 说明 | |
---|---|---|
pagecontext | javax.servlet.jsp.pagecontext | 就是jsp页面中的pagecontext对象 |
pagescope | java.util.map<string,object> | page范围属性名和属性值 |
requestscope | java.util.map<string,object> | request范围属性名和属性值 |
sessionscope | java.util.map<string,object> | session范围属性名和属性值 |
applicationscope | java.util.map<string,object> | web应用范围属性名和属性值 |
param | java.util.map<string,string> | 对应一个请求参数 |
paramvalues | java.util.map<string,string[]> | 对应一组请求参数 |
header | java.util.map<string,string> | 请求头 |
headervalues | java.util.map<string,string[]> | 请求头返回字符数组 |
cookie | java.util.map<string, cookie> | 获取某个cookie对象 |
initparam | java.util.map<string, string> | 获取web.xml中< |
-
-
请求域主要用于获取域对象中的属性,四个对象分别对应四个请求域。
-
pagescope
-
requestscope
-
sessionscope
-
applicationscope
-
-
-
请求参数
-
参数对象主要用于获取get或post请求中的参数。
-
param:获取指定的请求参数, 如:${param.username},与jsp中request.getparameter()作用一致。
-
-
-
${ user.username } // 获取user对象中。username属性值 ${ list[下标] } // 访问有序集合(或数组)中给定索引的元素 ${ map.key } // 访问map集合中指定key的属性值 ${ map[“key”] } // 访问特殊字符串的key的属性值
一定要记住一点,el表达式获取数据的时候,是通过对应的get方法获取的 beanutils 是通过set方法设置值
-
-
常用的功能获取
-
协议
-
服务器ip
-
服务器端口
-
获取工程路径
-
获取请求方法
-
获取客户端ip地址
-
-
-
-
但是在实际项目中为了缩短代码量,会把request对象放在pagecontext域对象中。然后再使用
<% // 先把request对象放到pagecontext域对象中 pagecontext.setattribute(“req”,request); %> //然后el表达式代码改为 工程名(上下文路径):${ req.contextpath }
<body> 参数username的值:${ param.username }<br/> 参数hobby的值:${ paramvalues.hobby[0] }<br/> 请求头accept-language的值:${ header["accept-language"] }<br/> 请求头accept的值:${ headervalues["accept"][0] }<br/> cookie的key = ${ cookie.jsessionid.name } : value = ${ cookie.jsessionid.value } <br/> 上下文参数:${ initparam.username }<br/> </body>