EL表达式的概述和简单用法



一 导语

1.JSP表达式语言(ExpressionLanguage),简称EL,最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。EL为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式。

2.EL表达式的目的是为了使JSP页面编写起来更简单。

二 表达式概述

1. 表达式概述

(1)EL表达式为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式

(2)EL表达式的目的是为了使jsp页面编写起来更简单

(3)EL表达式是便于获取数据而定义的一种语言

(4)EL表达式是为了便于获取数据而定义的一种语言,JSP2.0之后才成为一种标准。下面的示例是一个简单的EL表达式:

      <%@ page contentType="text/html;charset=UTF-8"%>

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<body>

             ${stuno + 1} <br>

</body>

</html>

输出的结果为 1

执行过程:作用:作用域对象中设置的属性,从四个域中设置属性并从域中查找,查找不到为null、和上面是等价的pageContext.findAttribute(“studentName”);

2.EL表达式的基本语法

EL表达式的语法格式:

 EL表达式的出现让Web的显示层发生了大的变革,EL表达式用于获取数据,在JSP 2.0之后成为一种标准,是由JSP 标准标签库专家组和JSP 2.0 专家组开发。

格式:${标识符}

JSPEL用于以下情形

(1)静态文本

(2)标准标签和自定义标签(可以作为元素属性的值,也可以在自定义或者 标准动作元素的内容中使用)

(3)EL不能在脚本元素中使用

三 EL表达式的基本运用

1.运算符:[] .

(1)EL提供(.)和([])两种运算符来存取数据,即使用点运算符(.)和方括号运算符([])。

–       点运算符和方括号运算符可以实现某种程度的互换, 如:

${student.name}等价于

        ${student[“name”]}  “”括起来的是表示常量

        ${student[name]}  name表示变量,优先取name的值

注:(1)如果studentBean类中属性的名称出现了—_ ( 如stu_id),则用${student[“name”]} 

    (2) 如果要动态取值,用[]

(2)当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号时,就一定要使用[]。例如${student.name}应当改为${student[“name”]}。

(3)如果要动态取值,就可以用[]来做,而.无法做到动态取值。例如${sessionScope.student[data]}中data是一个变量。

2.EL文字常量

一个EL表达式包含变量、文字常量、操作符。文字常量主要包括字符串、数字和布尔值、还有NULL,其中

–       字符串是由任何由单引号或双引号引起来的一串字符。

–       数字常量包括整型、浮点型,整型表示十进制、十六进制和八进制类型的值,浮点型与Java类似,可以包含任何正的或者负的浮点数。

–       布尔型包括true和false。

例子:${true}${10} ${10.5f} ${“hello”} ${null}

3.EL操作符

   (1)算数运算符

5+3=${5+3}

(2)关系运算符

   5&gt;3 ${5>3}

(3)逻辑运算符

   true && false${true && false}

(4)验证运算符---判空运算

   ${empty user } ${empty student.name }

   Empty是判空 为空返回的真  不为空返回的是假

(6)条件运算符

   ${(empty student.name) ? '空' : '非空'}

注:原样输出  \${5+4}  \是转移字符

 

.he []1

   在用el表达式取数据的时候,取不出来的时候用[]

四 EL表达式的隐式对象(11个)

1.与作用域有关的对象

pageScoperequestScope sessionScope applicationScope

     例子:${sessionScope.属性名}

          ${属性名}

   注:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。

2.与输入有关的隐式对象

Param paramValues

例子:${param.参数名}

3.Cookie----用来取得使用者的cookie值

例子:在cookie中设定了username属性值,可以使用

${cookie.username.value}来取得属性值。

4.header和headerValues

   (1)读取请求的头数据,使用header或headerValues内置对象

例子:header   ${header[“User-Agent”]},

(2)取得所有的头信息---headerValues

   例子:${headerValues}

等价于调用request.getHeaders()方法。

5.initParam

   initParam用来读取设置在web.xml中的参数值。例如${initParam.repeat},等价于:(String)application.getInitParameter(“repeat”);

 或servletContext.getInitParameter(“repeat”);

6.pageContext

pageContext用于取得其他有关用户要求或页面的详细信息

五 禁用EL

禁用有两种方法:

(1)是在一个page里设置,例子:

<!--设置忽略EL表达式,默认的情况下是false-->

<%@page isELIgnored="true" %>

   (2)在web.xml中设置,对所有的界面都管用:

      <jsp-config>

   <jsp-property-group>

             <url-pattern>*.jsp</url-pattern>

             <el-ignored>true</el-ignored>

           </jsp-property-group>

 </jsp-config>

六 如何用EL表达式来获取集合、类、hashMap中封装的数据

    编写java代码来模拟servlet里的代码

   1. 指定的作用域范围内存储变量

      <%

          String userName = "陈红军";

          //把变量设置到请求域中

          request.setAttribute("user", userName);

      %>

      <!-- 写的是属性的名称:相当于:pageContext.findAttribute("user")找到会返回对象,找不到返回null,但是在浏览器上不显示 -->

      <!-- 寻找的顺序:pageContext、request、session、application-->

      运用的EL的表达式为:${user}

2.封装在bean中

      <%--模拟servlet获取是数据封装在StudentBean对象,并把该对象存入到某个作用域对象中,把请求转交给jsp --%>

      <%

          StudentBean st = new StudentBean();

          st.setId(1);

          st.setName("李四");

          request.setAttribute("student", st);

      %>

      <!-- 获取属性 ,要有判空的操作,有反射的机制-->

   运用的EL的表达式为:${student.name}

3. javaBean对象中某些属性又是另一个类的对象,多级获取

      <%

          Address addr = new Address();

          addr.setPro("河北省");

          addr.setCity("保定市");

          StudentBean stu = new StudentBean();

          stu.setId(2);

          stu.setName("tom");

          stu.setAddress(addr);

          request.setAttribute("student1", stu);

      %>

       运用的EL的表达式为:

           ${student1.id}&nbsp;&nbsp;

          ${student1.name}&nbsp;&nbsp;

         ${student1.address.pro}${student1.address.city }

4.集合对象中的数据 ,并用EL输出

      <%

           List list = new ArrayList();

           list.add(0, new StudentBean(3, "张三"));

           list.add(1, new StudentBean(4, "aaa"));

           list.add(2, new StudentBean(5, "bbb"));

           list.add(3, new StudentBean(6, "ccc"));

          request.setAttribute("studentList", list);

      %>

   运用的EL的表达式为:

       ${studentList[1].id}&nbsp;

       ${studentList[1].name}&nbsp;

       ${studentList[1].address.pro }

5. Map类型的集合

       <%

          HashMap hm = new HashMap();

          hm.put("aaa",new StudentBean(10,"aaaaa"));

          hm.put("bbb",new StudentBean(20,"bbbbb"));

          hm.put("ccc",new StudentBean(30,"ccccc"));

          hm.put("111",new StudentBean(40,"ddddd"));

          request.setAttribute("studentMap",hm);

        %>

      运用的EL的表达式为:

       ${studentMap.aaa.id}&nbsp;${studentMap["aaa"].name}<br/>

        <!-- 如果键是数字,则必须用[]-->

        ${studentMap["111"].id}<br/>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值