EL表达式

EL表达式

语法:   ${域中数据的名称}

EL的主要作用

  • 获取数据

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据

(某个web域中的对象,访问javabeam属性、访问list集合、访问map集合、访问数组)

  • 执行算法

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成

一些简单的逻辑运算。${user==null}

  • 获取web开发常用对象

EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而

获得这些对象中的数据。

  • 调用java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法

获取数据

  1. 使用EL表达式获取数据语法: "${标识符}" EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回(注意,返回不是null,而是空字符串)
  2. EL表达式也可以轻松获取JavaBean的属性,或获取数组、collection、Map类型集合的数据,例如:
  • ${user.adress.city}
  • ${user.list[0]}:访问有序集合某个位置的元素
  • ${map.key}:获得map集合中指定的key值

执行算法

获得web开发常用对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取

这些对象的数据。

语法:${隐式对象的名称}:获得对象的引用

总结EL表达式的数据来源

  1. 获取域中数据

                ${域中数据的名称}

                ${scope.数据名称}

//从指定域中获取数据: ${scope.属性名称}
/*
pageScope------->pageContext
requestScope
sessionScope
applicationScope
*/

//代码
<%
		session.setAttribute("name", "session");
		request.setAttribute("name", "request");
		pageContext.setAttribute("name", "page");
		application.setAttribute("name", "application");
	
%>
		
${name}   //结果 page
/*
总结:同时在域中获取数据且数据名称一样,数据影响的范围越小,则优先级越高

*/	
//从指定域中获取数据
session:  ${sessionScope.name}
request: ${requestScope.name}
pageContext ${pageScope.name}
application ${applicationScope.name}


//获取JavaBean中的数据
<%
    User user1 = new User(11,"张三");
    request.setAttribute("user",user1);
%>
<--
${user}:获取到存入域中的对象
${user.name}:获取到对象的的name属性
-->
name:${user.name} //相当于user.getName
<br/>
password: ${user.password}

获取集合中的数据




<%User user1 = new User(11,"张三","123");
User user2 = new User(12,"李四","12");
User user3 = new User(13,"王五","1");


List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
request.setAttribute("list",users);
%>

${list} :获取到域中的对象
${list[1]}:获取集合中的某个元素
${list[1].name}:获取对象的属性

<%
        Map<String,User> map1 = new HashMap<>();
		map1.put("user1", user1);
		map1.put("user2",user2);
		map1.put("user3", user3);
		
		request.setAttribute("map", map1);
%>

        ${map} : 根据域中对象的名称,获取到map对象
        <br/>
		${map['key']}:根据对象的key值,获取的map中的对象
        <br/>
        name2:	${map['user2'].name }
        <br/>
        name1: ${map['user1'].name }

//结果
/*
[User [id=11, name=张三, password=12345], User [id=12, name=李四, password=12], User [id=13, name=王五, password=1]] 
User [id=12, name=李四, password=12] 
李四 
{user1=User [id=11, name=张三, password=12345], user2=User [id=12, name=李四, password=12], user3=User [id=13, name=王五, password=1]} 
User [id=11, name=张三, password=12345] 
name2:	李四 
name1: 张三

*/



2.获取请求参数中的数据

    ${param.参数名称}  ----->getParamter();

   ${paramValues.参数名称}  ----->getParamterValues()

name :${param.username}
<br/>
password:${param.password}
<br/>
${paramValues.hobby}:相当于使用request.getParamterValues() 得到参数组
${paramVAlues.hobby[1]} 根据索引获取数据

3.获取cookie中的数据

Cookie  cookie = new  Cookie("phone","125251252521");

response.addCookie(cookie);

cookie的value: ${cookie.phone.value}
cookie的name: ${cookie.phone.name}


4.获取请求头中的数据

host:${header.Host}

cookie:  ${headerValues.Cookie[0]}

5.执行算法


    <%  
        int a = 10;
        pageContext.setAttribute("a", a);
        
        int b = 5;
        pageContext.setAttribute("b",b);
    %>
    
    ${a + 20 }
    <br/>
    ${a + b }
    <br/>
    ${a mod b }
    <br/>
    ${a % b }
    <!--  mod 取模运算(取余数)  -->
    <hr/>
    ${a > b }
    <br/>
    ${a != b }
    <br/>
    ${a eq b }
    
    <%
        String str1 = null;
        pageContext.setAttribute("str1", str1);
        
        String str2 = "abc";
        pageContext.setAttribute("str2", str2);
    %>
    
    <br/>
    <hr/>
    ${str1 eq str2 }
    <br/>
    ${str1 == null or str1 eq '' }
    <br/>
    <!-- empty 判断对象是否为空 
        既判断是否是空对象,也判断是否是“” -->
    ${empty str1 }
    <br/>
    ${not empty str1 }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值