表达式语言EL(Expression Language)

JSP2.0以后推荐使用EL代替JSP表达式和脚本片段,EL全称为Expression Language,主要用于输出域对象属性。它可以全局查找page、request、session和application域,并提供pageScope、requestScope、sessionScope和applicationScope四个对象方便精确查找。EL还包含隐含对象如pageContext,以及用于获取请求参数、请求头、Cookie等的Map对象。此外,EL支持基本运算和使用empty运算符判断空值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么要使用EL
  • JSP2.0之后不建议使用 JSP表达式和JSP脚本片段,建议使用EL代替JSP表达式,使用JSTL代替JSP脚本片段
2.EL简介
  • 全称:Expression Language,翻译过来叫表达式语言
  • 格式:${表达式}
  • EL表达式主要用来将域对象中的属性输出到页面
  • EL表达式默认是全域查找
    • 先从page域中查找,找到后直接返回,找不到再去request域中找,找到后直接返回,找不到再继续向其他域找
    • 如果在application域中也找不到就返回一个空串
  • 我们如何精确查找域中的属性值呢?
    • EL为我们提供了四个Scope对象,这四个对象相当于将域对象中的域单独拿了出来
    • 这四个域对象分别是:pageScope、requestScope、sessionScope、applicationScope
      • pageScope
        • 用来获取page域中的属性值
      • requestScope
        • 用来获取request域中的属性值
      • sessionScope
        • 用来获取session域中的属性值
      • applicationScope
        • 用来获取application域中的属性值
    • 如果域对象中的属性名比较特殊,通过以下方式获取属性值
    
     <%
          request.setAttribute("hello-kitty", "value2");
     %>
    
     ${requestScope['hello-kitty'] }

  •  获取JavaBean中的属性 
    • 通过对象.属性名的方式获取对象的属性,调用的是对象的getXXX方法
    • 如果对象的属性还是一个对象,可以一直点下去
    
     <h2>获取JavaBean中的属性值</h2>
     <!-- 使用EL获取JavaBean对象的属性值,通过对象.属性名,调用的是对象的getXXX()方法 -->
     <%

          Student stu = new Student(1,"赵阿福");
          School sch = new School(1,"大吕院",stu);
          //将stu放到域对象中
//        pageContext.setAttribute("stu", stu);
          //将sch放到域对象中
          pageContext.setAttribute("sch", sch);
     %>
     <!-- 如果对象的属性仍是一个对象,可以一直点下去 -->
     ${sch.student.name }

3.EL中的11个隐含对象(内置对象)
  • 一个我们比较熟悉:pageContext
    • pageContext
      • pageContext即是EL中的隐含对象也是JSP中的隐含对象
      • 类型:PageContext
      • 作用:与JSP中的作用完全一样,一个顶九个,可以获取JSP中的其他隐含对象
      • 获取request对象
        • ${pageContext.request}
      • 获取项目的虚拟路径
        • ${pageContext.request.contextPath}
  • 四个Scope对象
    • pageScope
      • 类型:Map<String , Object>
      • 作用:获取page域中的属性值
    • requestScope
      • 类型:Map<String , Object>
      • 作用:获取request域中的属性值
    • sessionScope
      • 类型:Map<String , Object>
      • 作用:获取session域中的属性值
    • applicationScope
      • 类型:Map<String , Object>
      • 作用:获取application域中的属性值
  • 六个其他隐含对象
    • param
      • 类型:Map<String , String>
      • 作用:获取请求参数
    • paramValues
      • 类型:Map<String , String[]>
      • 作用:获取请求参数中一个键对应多个值的情况
    • header
      • 类型:Map<String , String>
      • 作用:获取请求头中的信息
    • headerValues
      • 类型:Map<String , String[]>
      • 作用:获取请求头中一个键对应多个值的情况
    • cookie
      • 类型:Map<String , Cookie>
      • 作用:根据cookie对象的名称获取Cookie对象
    • initParam
      • 类型:Map<String , String>
      • 作用:获取当前Web应用的初始化参数
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>- El中隐含对象的演示 -->
	<!-- 获取请求参数 -->
	欢迎您,${param.username }<br><br>
	<!-- 获取请求头的信息 -->
	${header['User-Agent'] }<br><br>
	<!-- 获取Cookie对象 -->
	${cookie.JSESSIONID }<br><br>
	<!-- 获取当前Web应用的初始化参数 -->
	${initParam.encode }
4.EL中的运算
  • 在EL表达式中可以直接进行加、减、乘、除等运算
  • 我们常用的一个运算符:empty
  • 我们主要使用empty运算符来判断一个字符串或一个集合是否为空
    • empty与null的区别
      • 空串时:null返回false;empty返回true
      • 空集合时:null返回false;empty返回true
<span style="white-space:pre">	</span><!-- empty运算符的应用 -->
	<!-- empty与null相似的地方 -->
<%
<span style="white-space:pre">	</span>request.setAttribute("hello", null);
%>
使用null的结果:${hello == null }<br>
使用empty的结果:${empty hello }<br>
<hr>
<span style="white-space:pre">	</span><!-- empty与null的区别一-->
<%
<span style="white-space:pre">	</span>request.setAttribute("hello2", "");
%>
使用null的结果:${hello2 == null }<br>
使用empty的结果:${empty hello2 }<br>
<span style="white-space:pre">	</span><!-- empty与null的区别二-->
<%
<span style="white-space:pre">	</span>List list  = new ArrayList();
<span style="white-space:pre">	</span>list.add("hello");
<span style="white-space:pre">	</span>request.setAttribute("list", list);
%>
使用null的结果:${list == null }<br>
使用empty的结果:${not empty list }<br>

<!-- 
<ol><li><span style="font-family: Arial, Helvetica, sans-serif;">	</span><span style="font-family: Arial, Helvetica, sans-serif;">通常使用empty运算符来判断一个字符串或一个集合是否为空</span></li></ol>-->















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值