现在的位置: 首页 > 综合 > 正文

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

2014年01月28日 ⁄ 综合 ⁄ 共 4681字 ⁄ 字号 评论关闭

 

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

一  导语

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

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

二  表达式概述

1. 表达式概述

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

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

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

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

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

<!DOCTYPE HTML 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 专家组开发。

格式:${标识符}

JSP EL用于以下情形

(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.与作用域有关的对象

pageScope requestScope 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/>

抱歉!评论已关闭.