13 EL表达式

EL表达式

标签(空格分隔): JavaWeb


EL(Expression Language)提供了在JSP中简化表达式的方法,让Jsp的代码更加简化。用于JSP文件中的数据访问。这种表达式语言能简化JSP文件中数据访问的代码,可用来代替传统的基于<%=%>形式的Java表达式,以及部分基于<%heels%>形式的Java程序片段。

基本语法

EL表达式的基本形式为:${var},所有的表达式都以${符号开头,以}符号结尾。如果在JSP文件的模版文件中使用EL表达式,那么表达式的值会输出到网页上。

例如以下Java表达式和El表达式的作用相同,都用于输出请求参数username:

<%=request.getParameter(“username”)%>

${param.username}

比较以上两种表达式的形式,可以看出,EL表达式能以更加简单的语法来访问数据。

EL表达式和Java表达式一样,既可以直接插入到JSP文件的模版文件中,也可以作为JSP标签的属性的值:

<jsp:useBeanid="myBean" scope="page" class=”defaultPackage.CounterBean”/>

<jsp:setProerptyname="myBean" property="count" value="${myBean.count+1}"/>

Current countvalue is :${myBean.count}

访问对象的属性及数组的元素

EL表达式语言可以使用点号运算符.来访问对象的属性,例如表达式${customer.name}表示customer对象的name属性。

EL表达式语言也可以使用方括号运算符”[]”来访问对象的属性,例如表达式${customer["name"]}${customer.name}是等价的。
方括号运算符”[]”还可以用来访问数组中的元素,例如${sustomers[0]}表示访问customers数组中的第一个元素。

获取数据

EL表达式可以用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据(某个web域中的对象,访问javabean的属性、访问list,map集合、访问数组)。

在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果对象中不存在标识符所对应的对象,则返回”“(注意不是null)。下面是EL表达式获取数据的几种情况,由于JSP是用来获取servlet传递过来的数据,所以在这个JSP里面先模拟向域中存放数据,再获取。具体看下面的例子:

<%@page import="javaBean.Address"%>
<%@page import="javaBean.Person"%> <!-- javaBean的具体代码就不写了,很简单 -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>EL表达式</title>
  </head>
  <body>  
    <%
        request.setAttribute("name", "aaa"); //先向request域中存个对象
     %>    
     <!-- 相当于pageContext.findAttribute("name") 会从page request session application四个域中寻找 -->
     ${name }

     <!-- 在JSP页面中使用EL表达式可以获取bean的属性 -->
     <%
        Person p = new Person();
        p.setAge(12);
        request.setAttribute("person", p);
     %>     
     ${person.age}


     <!--  在JSP页面中使用EL表达式可以获取bean中的bean。。。 -->
     <%
        Person person = new Person();
        Address address = new Address();
        person.setAddress(address);
        request.setAttribute("person", person);
     %>       
     ${person.address.name}


     <!-- 在JSP页面中使用EL表达式可以获取List集合指定位置的数据 -->
     <%
        Person p1 = new Person();
        p1.setName("aa");
        Person p2 = new Person();
        p2.setName("bb");

        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);

        request.setAttribute("list", list);
     %>
     ${list[0].name}

     <!-- 在JSP页面中使用EL表达式可以获取map集合的数据 -->
     <%
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", "aaaax");
        map.put("b", "bbbbx");
        map.put("1", "ccccx");

        request.setAttribute("map", map);
     %>
     ${map.a}
     ${map["1"] } <!-- 以数字为关键字时候的取法 -->

     <!-- 使用EL表达式可以获取web应用的名称 -->
     <a href="${pageContext.request.contextPath }/1.jsp">点击</a>

  </body>
</html>

执行运算符

EL表达式中还可以使用算数运算符,关系运算符,逻辑运算符,条件运算符。

EL语言提供了一个用于测试对象是否为空的特殊运算符“empty“,其语法形式为${empty var},它能判断var变量(确切地说,应该是命名变量)是否为空。在以下情况下empty运算符返回true:

  • var变量不存在,即没有定义。
  • var变量的值为null。
  • var变量引用集合(Set、List和Map)类型的对象,并且在i集合对象中不包含任何元素。

empty运算符可以与”!”运算符一起使用。

获取web开发常用对象

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

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

隐含对象名称以及描述:

pageContext:      //对应于JSP页面中的pageContext对象(注意:取的是pageContext对象)
pageScope:        //代表page域中用于保存属性的Map对象
requestScope:     //代表request域中用于保存属性的Map对象
sessionScope:     //代表session域中用于保存属性的Map对象
applicationScope: //代表application域中用于保存属性的Map对象
param:            //表示一个保存了所有请求参数的Map对象
paramValues:      //表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个String[]
header:           //表示保存了所有http请求头字段的Map对象
headerValues:     //同上,返回String[]数组。注意:如果头里面有"-",例如Accept-Encoding,则要headerValues["Accept-Encoding"]
cookie:           //表示一个保存了所有cookie的Map对象
initParam:        //表示了一个保存了所有web应用初始化参数的Map对象

具体看下面的例子:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>EL隐式对象</title>
  </head>
  <body>

    <!-- ${name} 表示 pageContext.findAttribute("name") 
        过程是这样:首先判断name是否为EL的隐式对象,如果是直接返回该隐式对象的引用,不是则调用findAttribute方法
    -->
    ${pageContext }  <!-- 拿到pageContext的引用:org.apache.jasper.runtime.PageContextImpl@155ef996  -->
    <!-- 拿到pageContext就可以拿到所有其他域对象了,比如 ${pageContext.request} -->
    <br>

    <!-- 从指定的page域中查找数据 -->
    <% 
        pageContext.setAttribute("name", "aaa");//map
    %>
    ${pageScope.name }
    <!-- ${name}会从四个域里面查找name 而${pageScope.name}只会从page域中查找 -->
    <br>  

    <!-- 从request域中查找数据 -->
    <% 
        request.setAttribute("name", "bbb");
    %>
    ${requestScope.name }
    <!-- 如果用${name}会取到aaa,因为会首先在pageContext中查找 -->
    <br>   

    <!-- 从session域中查找数据,可以用于检查用户是否登陆 -->
    <!-- 从application域中查找数据,与上面的原理都相同 -->

    <!-- 获得用于保存请求参数的map,并从map中获取数据 -->
    <!-- http://localhost:8080/test/1.jsp?name=ccc -->
    ${param.name }  <!-- 拿到ccc -->
    <!-- 此表达式会经常用在数据回显上 -->
    <form action="${pageContext.request.contextPath }/servlet/ReqisterServlet" method="post">
        <input type="text" name="username" value="${param.username }">
        <input type="submit" value="注册">
    </form>
    <br>    

    <!-- paramValue获得请求参数  map{"",String[]} -->
    <!-- http://localhost:8080/test/1.jsp?like=sing&like=dance -->
    ${paramValues.like[0] }
    ${paramValues.like[1] }  
    <br>

    <!-- header获取请求头 -->
    ${header.Accept }
    ${header["Accept-Encoding"]}
    <br>

    <!-- headerValues和paramValues一样的 -->

    <!-- 获取客户机提交的cookie -->
    ${cookie.JSESSIONID.value } <!-- 获得cookie对象中名为JSESSIONID的cookie值 -->
    <br>   

    <!-- 获取web应用初始化参数 -->
    ${initParam.name } <!-- 用于获得web.xml中<context-Param>中的参数 --> 
    <br>

  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值