EL表达式

1、什么是EL 表达式
        全称:Expression Language,一种写法非常简介的表达式。语法  简单易懂,便于使用。表达式语言的灵感来自于ECMAScript 和
        XPath 表达式语言
2、EL 表达式的作用
        作用:让jsp 书写起来更加的方便。简化在jsp 中获取作用域或者请求数据的写法。也会搭配Jstl 来进行使用。
3、使用EL 表达式
        语法结构:${expression},提供.和[ ]两种运算符来存取数据。

使用:
    a) 使用EL 表达式获取请求数据
        i. 获取用户请求数据
        ii. 获取请求头数据
        iii. 获取Cookie 数据
    b) 使用EL 表达式获取作用域数据
        i. 获取作用域数据
        ii. 作用域查找顺序
        iii. 获取指定作用域中的数据
    c) 使用EL 表达式进行运算

        i. 算术运算
        ii. 关系运算
        iii. 逻辑运算

    d) EL 表达式空值判断empty

            使用过程注解:

    传统方式获取作用域 :
             缺点一:导入包
             缺点二:需要强转
             缺点三:获取数据的代码过于麻烦

         解决:使用EL表达式获取作用域对象
         
         使用EL 表单大师获取作用域对象:
             作用:获取作用域对象中的数据。
                     注意:该表达式 只会获取的是 pageContext,request,Session,application 四个对象中的数据,其他数据局一概不理会。
                             找到了获取返回,找不到什么都不现实,也不报错。
             语法:
                 ${表达式}
                 
                 表达式:
                      获取请求数据:
                              request对象存储了请求数据-----> param.键名            返回值
                              request对象存储了请求数据-----> paramValues.键名       返回的是数组
                     
                 通过serAttribute 方法存储到作用域的对象中的数据
                         ${键名 } 返回键名所对应的值。
                             注意:
                                 如果存储的是普通字符串则直接返回
                                 如果存储的是对象,则返回的是对象
                                         获取对象中的数据:
                                             普通对象:
                                                 ${键名.属性值.属性值....}
                                             集合:
                                                 list集合---->${键名[角标]}    因为lisi 存储方式为数组,所以取值需要以数组下标值方式取
                                                 map集合----->${键名.map集合存储的键名}

传统方式获取作用域和EL 表达式获取作用的对比:

<!-- 传统方式获取	作用域对象 -->
<h3>EL 表达式学习:使用传统方式获取数据</h3>
<b><%=request.getParameter("uname") %></b><br>
 <b><%=request.getAttribute("str") %></b><br>
 <b><%=((User)request.getAttribute("user")).getAddr().getTown()%></b><br>
 <b><%=((ArrayList)request.getAttribute("list")).get(2) %></b><br>
 <b><%=((ArrayList<User>)request.getAttribute("list2")).get(0).getAddr().getCity() %></b><br>
 <b><%=((HashMap)request.getAttribute("map")).get("c") %></b><br>
 <b><%=((HashMap<String,User>)request.getAttribute("map2")).get("a1").getAddr().getCity() %></b>
<%
	String str2 = "哈哈哈";
%>
<!-- EL 表达式获取作用域对象 -->
<hr>
<h3>EL 表达式学习:使用EL 表达式 获取数据</h3>
<b>${param.uname}</b><br>
<b>${paramValues.fav[1] }</b><br>
 <b>${str}</b><br />
 <b>${user.addr.town }</b><br>
 <b>${list[2] }</b><br>
 <b>${list2[0].addr.city }</b><br>
 <b>${map.c }</b><br>
 <b>${map2.a1.addr.city }</b><br> 
 <!-- 找不到,因为不在四个对象中 -->
 <b>--${str2 }</b>

作用域查找顺序:
             默认查找顺序:
             pageContext-----> request----->session------->application
             注意:
                 每次查找都是从小到大进行查找,找到了则获取,找不到了继续查取。
                 
               指定作用域查找:
               作用域+Scope.键名       pageContext写法(特殊):pageScope.键名
                   ${pageScope.hello }--${requestScope.hello }--${sessionScope.hello }---${applicationScope.hello }
                  

 <h3>EL 的作用域查找顺序 </h3>	 
 <%
 	pageContext.setAttribute("hello", "hello pageContext");
 	request.setAttribute("hello", "hello request");
 	session.setAttribute("hello", "hello session");
 	application.setAttribute("hello", "hello application");
 %>
 <%--指定作用域查找 作用域+Scope.键名 ,pageContext写法:pageScope.键名    --%>
 <b>${pageScope.hello }--${requestScope.hello }--${sessionScope.hello }---${applicationScope.hello }</b> 

    El 表达式的逻辑运算:
         ${逻辑表达式}    &&   ||     !
        ${算术表达式}       +    -   *   /

        ${ 关系表达式}        >,<,>=,  !=,%

        特殊:三目运算符.......                 
        注意:
            + 表示 加法 运算,不表示字符连接,使用EL 表达式进行字符连接会报错
        ${a+b }            去四个作用域中找 a 和b 对应的值,做逻辑运算    
        ${1+"2" }        "2",底层自动把"2" 转成 int 类型,做逻辑运算

 

${1 + 2 }---${4<1 }----${4%3 }----${sex==1?'男':'女'}----${1+"2" }

El的空值判断:
            ${empty 键名}
            作用:判断键名对应的值 是否存有数据

    

<!-- EL 的控制判断 -->
<h3>EL 表达式的空值 </h3>
${empty s }---${empty s1 }---${empty s2 }----${empty s3 }	 
<!-- User()  的属性有默认值,非空,所以falses -->

 

 

请求头数据:
        ${header }    返回所有请求头数据
        ${header["键名"]}     返回指定键名的请求头数据
        ${headerValues["键名"]}      返回指定的键名(同键不同值) 的值的数组;
        
    获取cookie数据:
        ${cookie}            返回了存储所有cookie对象的map    集合
        ${cookie.JSESSIONID.value} -----${cookie.JSESSIONID.name}
                    返回cookie 的值 和name

<h3>EL  获取请求头数据和cookie 数据</h3> 
${header }<br>
<!-- 拿某一个数据 -->
${header["cookie"] }---${headerValues["accept-language"][0] }

 <hr>
 ${cookie }---- ${cookie.JSESSIONID.value} -----${cookie.JSESSIONID.name}  
 

 

转载于:https://my.oschina.net/u/3788977/blog/2221843

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值