作者:http://blog.csdn.net/goskalrie/article/details/51315397

简介

EL(Expression Language)表达式语言实在JSP2.0版本中引入的新特性,它用于JSP文件中的数据访问。这种表达式语言能简化JSP文件中数据访问的代码,可用来代替传统的基于”<%=”和”%>”形式的Java表达式,以及部分基于“<%”heels“%>”形式的Java程序片段。

例如:

<%

ShoppingCart cart =(ShoppingCart)session.getAttribute(“cart”);

if(cart != null){

%>

<%=cart.getTotal()%>

<%} %>

上述代码等价于:

${sessionScope.cart.total}

基本语法

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

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

Java表达式:<%=request.getParameter(“username”)%>

EL表达式:${param.username}

比较以上两种表达式的形式,可以看出,EL表达式使得JSP文件的穿件人员能用更加简单的语法来访问数据。

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语言的运算符

运算符类型

运算符

说明

范例

结果

+

${16+5}

21

-

${16-5}

11

*

${16*5}

80

/或div

${16/5}

3.2

%或mod

模(求余)

${16%5}

1

==或eq

等于

${16==5}

false

!=或ne

不等于

${16!=5}

true

<或lt

小于

${16<5}

false

>或gt

大于

${16>5}

true

<=或le

小于等于

${16<=5}

false

>=或ge

大于等于

${16>=5}

true

逻辑

运算

&&或and

逻辑与

${16>5&&16<18}

true

||或or

逻辑或

${16>5||16<18}

true

!或not

逻辑非

${!(16>5)}

false

empty运算符

empty

检查是否为空值

${empty var}

如果变量var为null,就返回true

条件运算符

a?b:c

条件运算符

${16>5?16:5}

16

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

·  var变量不存在,即没有定义。

·  var变量的值为null。

·  var变量引用集合(Set、List和Map)类型的对象,并且在i集合对象中不包含任何元素。

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

隐含对象

EL语言定义了11个隐含对象,他们都是java.util.Map类型。

EL表达式语言中的隐含对象

隐含对象的固定变量名

类型

说明

applicationScope

java.util.Map

把Web应用范围内的属性名和属性值进行映射

cookie

java.util.Map

把客户请求中的Cookie名和Cookie对象进行映射

header

java.util.Map

把HTTP请求头部的项目名和项目值进行映射

headerValues

java.util.Map

把HTTP请求头部的项目名和项目值的数组进行映射,例如${headerValues[“accept-language”]}等价于<%=request.getHeaders(“accept-laguage”)%>

initParam

java.util.Map

把Web应用的初始化参数名和参数值进行映射

pageContext

java.util.Map

表示javax.servlet.jsp.PageContext对象

pageScope

java.util.Map

把页面范围内的属性名和属性值进行映射

param

java.util.Map

把客户请求中的请求参数名和参数值进行映射

paramValues

java.util.Map

把客户请求中的请求参数名和所有匹配的参数值数组进行映射

resquestScope

java.util.Map

把请求范围内的属性名和属性值进行映射

sessionScope

java.util.Map

把会话范围内的属性名和属性值进行映射

命名变量

EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或实例变量,而是存放在特定该范围内的属性,命名变量的名字和属性名字对应。例如${username}等价于以下代码:

<%

Stringusername=(String)pageContext.finAttribute(“username”);

if(username != null){

%>

<%=username%>

<%} %>

假如在Person类中并不存在username属性,而是提供了public类型的getUsername()方法:

public String getUsername(){

returnthis.lastName + “.” + this.firstName;

}

就可以通过${person.username}表达式获得person.getUsername()方法的返回值。

自定义和使用EL函数

EL表达式语言可以访问EL函数。EL函数实际上与Java类的方法对应,这个Java类必须定义为public类型,并且作为函数的方法必须声明为public static类型。当Java类定义好以后,应该在标签描述符(TLD)文件中,把Java类的方法映射为函数。

创建一个简单的工具类,定义静态方法localNowDate()方法,在页面中显示当前的本地时间。静态方法styleTable1()设置常用的表格样式,静态方法funcAlert()自定义简单的js方法,静态方法返回一个自定义的页面控件。

  1. public static String localNowDate(){
  2. Date date = new Date();
  3. String dateString = (1900+date.getYear()) + " 年 " + (date.getMonth() + 1) + " 月 " + date.getDate() + " 日    \n"
  4. +date.toLocaleString().substring(9);
  5. return dateString;
  6. }
  7. public static String styleTable1(){
  8. return "font-size:20px;color:#E91E63;background-color: #795548;";
  9. }
  10. public static String funcAlert(String content){
  11. System.out.println(content);
  12. return "alert('" + content +"')";
  13. }
  14. public static String myTable(){
  15. return "<table id='myTable' style='border-width:2px;border-style: solid;border-color:#795548;'>"
  16. + "<tr style='background-color:#666666;'><th>Head1</th><th>Head2</th></tr>"
  17. + "<tr><td>Element1</td><td>Element2</td></tr></table>";
  18. }

然后定义TLD文件:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
  5. version="2.0">
  6. <tlib-version>1.0</tlib-version>
  7. <short-name>elDemo</short-name>
  8. <uri>elDemo</uri>
  9. <function>
  10. <description>show local now dateTime</description>
  11. <name>localNowDate</name>
  12. <function-class>dis.geo.demos.el.ELDemo</function-class>
  13. <function-signature>java.lang.String localNowDate()</function-signature>
  14. </function>
  15. <function>
  16. <description>styleTable1</description>
  17. <name>styleTable1</name>
  18. <function-class>dis.geo.demos.el.ELDemo</function-class>
  19. <function-signature>java.lang.String styleTable1()</function-signature>
  20. </function>
  21. <function>
  22. <description>styleTable1</description>
  23. <name>funcAlert</name>
  24. <function-class>dis.geo.demos.el.ELDemo</function-class>
  25. <function-signature>java.lang.String funcAlert(java.lang.String)</function-signature>
  26. </function>
  27. <function>
  28. <description>myTable</description>
  29. <name>myTable</name>
  30. <function-class>dis.geo.demos.el.ELDemo</function-class>
  31. <function-signature>java.lang.String myTable()</function-signature>
  32. </function>
  33. </taglib>

在web.xml文件中注册taglib:

  1. <taglib>
  2. <taglib-uri>/elDemo</taglib-uri>
  3. <taglib-location>fiels/elDemo.tld</taglib-location>
  4. </taglib>

在JSP文件中使用自定义的EL表达式:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8" isELIgnored="false"%>
  3. <%@ taglib prefix="me" uri="/elDemo" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <title>MyELDemo</title>
  8. </head>
  9. <script type="text/javascript">
  10. </script>
  11. <body>
  12. <p>${me:localNowDate()}</p><br/>
  13. <table style="${me:styleTable1()}">
  14. <tr>
  15. <td>1.1</td>
  16. <td>1.2</td>
  17. <td>1.3</td>
  18. </tr>
  19. <tr>
  20. <td>2.1</td>
  21. <td>2.2</td>
  22. <td>2.3</td>
  23. </tr>
  24. <tr>
  25. <td>3.1</td>
  26. <td>3.2</td>
  27. <td>3.3</td>
  28. </tr>
  29. </table>
  30. <hr/>
  31. <a href="#" onclick="${me:funcAlert('Clicked me!!!')}">click me</a>
  32. <hr/>
  33. ${me:myTable() }
  34. </body>
  35. </html>

启动服务器,查看页面效果:

总结:

EL表达式的使用能够简化页面内容,提高代码的复用率,其可以完成类似于自定义JSP标签,CSS样式。假如有这样的一种情况,需要在页面中使用内联样式,而样式的内容又很多,这样页面中不仅有标签还有大量的内联样式,不免有些混乱,使用上面例子中的自定义EL就可以解决此类问题。

EL=Expression  Language=Easy Language(简化语言)

EL表达式及其定义和使用 转的更多相关文章

  1. EL表达式具体解释

    在 JSP 页面中,使用标签库取代传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而.由自己定义标签非常easy造成反复定义和非标准的实现.鉴于此.出现了 JSTL ( JSP St ...

  2. EL表达式中的11个隐式对象

    EL表达式中定义了11个隐式对象,使用这些隐式对象可以很方便地读取到Cookie.HTTP请求消息头字段.请求参数.Web应用程序中的初始化参数的信息,EL表达式中的隐式对象具体如下: 隐式对象 作用 ...

  3. 使用EL表达式需要注意的

    1.表达式与Java无关,表达式都是以${开始,以}结束. 2.EL访问java变量不能直接访问,因为得不到数据,要访问数据,需要将其放到作用域中.而使用<%=java变量%>可以访问ja ...

  4. JavaWeb 之 EL表达式

    EL 表达式 一.概述 1.概念 EL 表达式:Expression Language 表达式语言. 2.作用 替换和简化 jsp 页面中 java 代码的编写. 3.语法格式 ${表达式} 4.注意 ...

  5. (十一)El表达式详细介绍

    看之前,最好先看下 el表达式快速入门 本来将重点讲下 el表达式 能干嘛 : 目录 执行计算 获得 web 开发常用对象 关于 param 与 paramValues 的用法: 关于 header ...

  6. (十)EL表达式和JSTL标签快速入门

    目录 什么是 el 表达式 示例:使用EL表达式获取pageContext .request.session.application域中的数据: 示例:使用EL表达式获取Bean属性 获取当前WEB应 ...

  7. Java Web程序设计笔记 • 【第9章 EL表达式】

    全部章节   >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...

  8. java web学习总结(三十一) -------------------EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  9. JavaWeb:EL表达式

    JavaWeb:EL表达式 说明 1.Expression Language语言,一种用于JSP文件中的数据访问的语言. 2.能够简化JSP文件中该数据访问的代码,可用来替代传统的基于<%= % ...

随机推荐

  1. 京东电话面试——PHP开发

    1.学过<数据结构>吗?你学过的计算机相关课程有哪些? 2.web操作中,当你输入一个url到看到页面,描述一下这中间发生了什么? 3.TCP/IP的请求方式都有哪些? 4.POST和GE ...

  2. web2py相关-------------------------------(一)初遇

    在第一次换工作的时候,希望转行 做编程,就面试了很多家,很多人问我 懂不懂html 书写,我非常诚实的告诉他们不会. 当然那时我很天真的认为,只要自己愿意学习这些都不是问题,事实证明人的学习能力是很快 ...

  3. 在ubuntu12.0.4上搭建samba服务器以实现文件共享

    在安装之前samba服务器之前,先进行以下配置和测试. <壹> 准备工作 一.NAT联网方式 (1)硬件连接 无需网线,无需路由器 (2)虚拟机选择NAT连接方式 (3)测试网络通不通 在 ...

  4. 从 IT 的角度思考 BIM(一):面向对象

    还记得那个笑话吗:要把大象放进冰箱,总共分几步?这不仅仅是一个笑话,还是一个值得我们好好分析的笑话. 如果要放进冰箱的是一个苹果,那么也就不可笑了,但换成大象,就引起了我们的兴趣和注意,为什么? 我们 ...

  5. 贴板子系列_1-exgcd

    exgcd ll exgcd(ll a,ll b,ll &x,ll &y) { ) { x=;y=;return a; } ll r=exgcd(b,a%b,x,y); ll t=x; ...

  6. 文件操作 - NSFileManager

    iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认 ...

  7. combo下拉列表选择

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. C#中通过调用Dll函数时,执行一段时间后,就会报内存可能被破坏的错的解决办法

    遇到同样的问题,已经解决的:http://blog.csdn.net/youxiazzz12/article/details/24313347

  9. canvas仿黑客帝国的字符下落

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  10. VMware下打开Chrome OS遇到没有网络连接可用

    打开ChromeOS.vmx文件,最后一行添加 ethernet0.virtualDev = "e1000" 就能解决.