EL表达式

零. 概述

EL 全名为Expression Language。EL主要作用:
1. 获取数据
 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
2. 执行运算
 利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
3. 获取web开发常用对象
 EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
4. 调用Java方法
 EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

一. 获取数据

格式:${expression}

EL表达式语句在执行时,会调用pageContext.findAttribute()方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回“”,EL把null值直接以空字符串进行显示,避免了运算时发生错误而抛出异常

1..获取bean的属性
    <% 
        User u = new User();
        u.setAge(20);
        request.setAttribute("person",u);
     %>
    年龄:${person.age}

2..获取数组或列表元素
     <% 
       List userlist = new ArrayList();
       User u = new User();
       u.setAge(20);
       userlist.add(u);
       request.setAttribute("userlist", userlist);
     %>
     年龄:${userlist[0].age}

3..获取map中元素(两种方式均可)
     <% 
         Map<String,String> map = new HashMap<String,String>();
         map.put("user","nic");
         map.put("role", "admin");
         request.setAttribute("login", map);
     %>
      USER: ${login.user} <br>
      ROLE: ${login["role"]} 

大多数情况下.运算符和[]运算符是通用的,以下情况之内用[]:
1)包含特殊字符
${user[first-name]}
2)通过变量动态取值
${user[param]}

二. 执行运算

包括算术运算,逻辑运算和关系运算等
这里写图片描述

三. 获取web开发常用对象

EL提供了11个隐式对象,其中除了pageContext隐式对象对应pageContext外,其他隐式对象都是对应其Map类型。使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。

  • pageContext隐式对象 : 对应于JSP页面中的pageContext对象,其本身就是一个Javabean,只要是getXxx()方法,就可以用 ${pageContext.xxx}获取到
  • initParam隐式对象 : 表示一个保存了所有web应用初始化参数的map对象,可以取得web.xml中设置的ServletContext初始参数,即<context-param>中设置的初始参数,例如 ${initParam.initCount}相当于 <%=servletContext.getInitParameter("initCount") %>
  • cookie隐式对象 :可通过 ${cookie.cookiename} 获取cookie中对应的值
  • 属性范围相关隐式对象 : pageScope , requestScope , sessionScope , applicationScope分别对应Jsp隐式对象 pageContext , request , session , application的setAttribute()方法所设置的属性对象,如果不对作用范围进行指定,则默认按照page、request、session、application的顺序进行查找。需要注意的式,EL表达式中的这个四个对象,仅仅代表作用范围,并不等同于Jsp中的四个对象
  • 请求参数相关隐式对象 : 例如 ${param.user}相当于<%=request.getParameter("user") %> , 而 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[],所以往往通过下标指定具体的参数
  • 标头相关隐式对象: 如果要获取用户请求的表头数据,可以通过 header 或 headerValues 隐式对象 , 例如 ${header["User-Agent"]}相当于 <%=request.getHeader("User-Agent")%> ,headerValues 则对应 getHeaders() 方法

四. 调用Java方法

EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。

例如:定义一个求集合大小的函数,在Jsp页面中调用

step1.. 在一个public类中完成这个静态方法:

package util;

public class Util {
     public static String sayHello(String name){      
          return  "Hello  " + name;  
     }  
}

step2.. 提供tld描述文件,此文件可以放到WEB-INF下或其目录下:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>EL Function</short-name>
 <!--对应引用处的uri,可以随便写-->  
 <uri>/ELfunction</uri>

  <function>
        <description>打印hello+姓名</description>
        <!--子元素用于指定EL自定义函数的名称-->
        <name>sayHello</name>
        <!--子元素用于指定完整的Java类名-->
        <function-class>util.Util</function-class>
        <!--子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。-->
        <function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
    </function>

</taglib>

step3..在jsp页面中使用taglib引入函数库

<%@ taglib prefix="util" uri="/ELfunction" %>

step4..以${prefix:method(params)}的格式使用该函数

${util:sayHello("nic")}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值