EL表达式

总的总结

EL简介

  • EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

  • EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作

  • EL表达式仅仅用来读取数据,而不能对数据进行修改。

  • 使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。

EL基本使用

  • EL表达式总是放在{}中,而且前边有一个$作为前缀。

    • ${EL表达式}

  • 获取域中的对象可以直接使用对象名,如获取域中名字为user的对象

    • ${user}

  • 获取对象的属性值可以直接通过对象.属性名

    • ${user.name}

    • ${user.age}

    • 注意:这里的属性名是get和set方法对应的属性值,并不是对象中的变量名。

      • 比如:如果获取name属性值,那么该对象中必定要存在一个getName()方法。

  • 获取对象的属性也可以通过对象[属性名]

    • ${user[“name”]}

    • ${user[“age”]}

  • 获取Map中属性时可以以直接通过属性的key

    • ${map.key}

    • ${map[key]}

  • 在指定域中获取属性

    • EL表达式中如果我们直接使用属性名如:${user},它将会在四个域中由小到大依次查找。顺序:pageScope、requestScope、sessionScope、applicationScope。

    • 也可以指定从哪个域中获取:

      • ${ pageScope .user}:当前页面

      • ${requestScope.user}:当前请求

      • ${sessionScope.user}:当前会话

      • ${sessionScope.user}:当前应用

EL隐含对象

  • EL中包含11个隐含对象,这些对象可以在EL表达式中直接使用。

pageContext

  • pageContext和JSP中的pageContext功能一样。

请求域

  • 请求域主要用于获取域对象中的属性,四个对象分别对应四个请求域。

    • pageScope

    • requestScope

    • sessionScope

    • applicationScope

请求参数

  • 参数对象主要用于获取get或post请求中的参数。

    • param;

      • 获取指定的请求参数, 如:${param.username}

    • paramValues;

      • 获取请求参数数组,如:${paramValues.sport[1]}

其他

  • header;

  • headerValues;

  • initParam;

  • cookie;

EL逻辑运算2

 

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/或div

${17/5}或${17 div 5}

3

%或mod

取余

${17%5}或${17 mod 5}

2

==或eq

等于

${5==5}或${5 eq 5}

true

!=或ne

不等于

${5!=5}或${5 ne 5}

false

<或lt

小于

${3<5}或${3 lt 5}

true

>或gt

大于

${3>5}或${3 gt 5}

false

<=或le

小于等于

${3<=5}或${3 le 5}

true

>=或ge

大于等于

${3>=5}或${3 ge 5}

false

&&或and

并且

${true&&false}或${true and false}

false

!或not

${!true}或${not true}

false

||或or

或者

${true||false}或${true or false}

true

empty

是否为空

${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”}

true

 

 


==========================================================================================================================================


细致的总结

jsp页面开始时,如果大量的使用jsp表达式和脚本片段,会造成页面的可读性差

         jsp页面中使用的数据一般是从Servlet中通过域对象共享过来的

         jsp2.0之后不推荐使用jsp表达式和脚本片段

         

         jsp表达式 : 向页面输出内容(变量)

              使用EL表达式替代

              EL表达式: jsp的内置的表达式语言  expression language

                  默认作用:从域中获取属性值 显示到页面中

                  EL表达式如果没有取到值,页面中什么都不显示

                  EL表达式只能用来获取属性值显示到页面中,不能设置属性值

                  EL只能调用对象的有返回值的方法,并且支持以属性名的方式去调用

                  EL对取到的值会自动进行类型转换

                  EL需要操作的数据必须先存到域中然后再通过EL获取使用

                  语法:

                       ${表达式 }

                       1、全域查找:根据表达式从域中获取属性值显示到页面中

                            ${key }

                            el自动根据传入的key遍历所有域查询对应的属性值,找到则返回停止查找

                            伪代码:

                                Object obj = "";

                                obj = pageContext.getAttribute("key");

                                if(obj==""){

                                     obj = request.getAttribute("key");

                                }

                                if(obj==""){

                                     obj = session.getAttribute("key");

                                }

                                if(obj==""){

                                     obj = application.getAttribute("key");

                                }

                       2、指定域查询:  pageScope、requestScope、sessionScope、applicationScope(注意域的作用大小)

                            ${xxxScope.key}  

                       3、获取域中的复杂属性:

                            ${obj.属性名 }    等价于 obj.get属性名();

                       4、取出域中的list中的值:

                             ${list[index]}

                       5、获取域中的map指定键对应的值:

                            5.1 如果map的键没有特殊符号:${map.key}

                            5.2 如果map的键有特殊符号:${map['t2-1']}

         jsp脚本片段:  编写java逻辑代码

              使用jstl标签库代替,将一段段的逻辑代码封装为jsp标签[jsp:forward]

EL中方法的调用:

     el中不推荐直接调用方法 , 推荐以属性名的形式去调用get方法

        并不是真正的去使用属性(属性是私有的没法调用),是通过属性名去找对应的get、set方法,所以我们在封装时尽量规范(让ide自动生成)

          user.username  ==》  user.getUsername();

          BeanHandler: 可以将查询到的第一条记录的数据封装位对象

                   根据查询到的列名找javabean的对应的setXXX方法,调用方法时将列的值传入

 

EL需要操作的数据必须先存到域中然后再通过EL获取使用

 <%//必须存入值才能通过EL获取到

          List list = new ArrayList();

          list.add(new User(11, "wangyang" , "123456" , "wy@12.com"));

          list.add(123);

          list.add("hehe");

          //el操作的值必须先存到域中

          pageContext.setAttribute("list", list);

      %>

EL表达式支持数学运算

所以当获取的值中带有运算符号时,必须用[]括起来

${map['t2-3'] }<br/><!-- el表达式支持数学运算 -->

 

EL为了可以将其他的数据获取显示到页面中,提供了11个内置对象和jsp9大内置对象作用类似,但是不一样

都是我们熟悉的,想想九大内置对象(面试提问率很高的)

1、pageContext:不能用来向域中设置属性值,也不能获取属性值

              和jsp的pageContext类似,用来获取jsp的其他8个隐含对象

              作用:拼接url地址

                  使用少   pageContext.request.contextPath 获取上下文路径

         2、pageScope

              类型:Map<String , Object> pageScope

              代表: page域中的属性值集合

              作用:获取pageContext域中的属性值

         3、requestScope

              类型:Map<String , Object>

              代表:request域中的数据

              作用:

         4、sessionScope

              类型:Map<String , Object>

              代表:session域中的数据

              作用:

         5、applicationScope

              类型:Map<String , Object>

              代表:application域中的数据

         6、param: 使用多  http://localhost:8080/08_web_EL/el02_obj.jsp?username=laowang&password=12345

                  param.put("username" , "laowang");

                  param.put("password" , "123456");

              类型:Map<String , String>

              代表:一个请求参数对应一个值的请求参数的集合

              作用:获取请求参数

         7、paramValues:username=laowang&password=12345&hobby=tingjie&hobby=cls

              paramValues.put("hobby" , new String[]{"tingjie" , "cls"});

              类型:Map<String , String[]>

              代表:一个键对应多个值的请求参数的集合

         8、header:  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36

                  header.put("User-Agent" ,"....");

              类型:Map<String  , String>

              代表:请求报文的请求头数据

              作用:获取请求头数据

         9、headerValues:一般不用

              类型:Map<String , String[]>

              代表:一个请求头的键对应多个值的请求

              作用:

         10、initParam:

              类型:Map<String , String>

              代表:jsp页面翻译后的Servlet配置的初始化参数

              作用:不用

         11、cookie:  服务器识别浏览器的标记

              类型:Map<Stirng , Cookie>

              代表:浏览器请求报文中的cookie

              作用:获取cookie

你会发现都是键值对,也就是获取各种各样的值!!!!!

 <h3>pageContext</h3>

      拼接url地址:${pageContext.request.scheme }://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/

      <h3>取出域中的值[键有特殊符号]</h3>

      <%

          request.setAttribute("t2-1", "hehe");

      %>

      ${requestScope.t2-1 }

      <h3>获取请求参数</h3>

      ${param.username }<br/>

      ${paramValues.hobby[0] }

      <h3>获取请求头数据</h3>

     <%--  ${header.User-Agent } --%><!-- 先从请求头的集合中根据User键去获取对应的值没有查找到,  再根据Agent全域查找对应的值也没有找到 -->

     ${header['User-Agent'] }

 

取值的不同:

      <%

          request.setAttribute("age" , 18);

      %>

      <!-- 使用jsp表达式取出值显示到页面中: 在servlet中和jsp页面的表达式或脚本片段中按照以下语法来使用 -->

      <%=request.getParameter("username") %><br/>

      <%=request.getAttribute("age") %><br/>

     

      <!-- 使用EL表达式取出值显示到页面中: el语法 -->

      ${param.username }<br/>

      ${requestScope.age }

 

EL数学运算和逻辑运算

EL表达式支持数学和逻辑运算,先将表达式进行运行计算,再将计算后的结果输出到页面中显示

              如果表达式中使用的是+-*/ 会自动将表达式两边的不是数字的内容转为数字使用

              如果是逻辑运算符不会自动转换

              +只能进行数字运算

              支持查找集合中的下标查找

空值判断:(区分一下==和empty的不同

EL表达式经常会获取Servlet中共享的数据集合进行遍历显示

         ,遍历之前需要判断是否为空

         页面中如果集合==null 或者 集合的长度为0,就没有必要遍历

         

         EL中提供了empty元素符:  用来做空值判断,它认为=null的和长度为0的内容就是空,判断后返回true

              - 只能对字符串集合数组进行长度判断,自定义类的对象没有判断

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

救救孩子把

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值