学习笔记-----EL

来源:互联网 发布:h3c mac地址过滤 编辑:程序博客网 时间:2024/05/18 05:11
 
[学习笔记]
上一篇|下一篇|编辑编辑|删除删除|返回
EL (Expression Language)
概念和特性

  EL表达式语言原先只是用JSTL(Java Standard Tag Lib)中的存取数据的一种语言,随着WEB2.0的到来 它才被真正归入到JSP的标准规范中.现在EL也可以在JSP页面中直接使用,但是所提供的服务器必须是支持JSP2.0/SERVLET2.4的.

  EL和其他的语言一样都具有一般计算机语言的特征.有自己的语法格式,特有符号,支持关系运算 数学运算和逻辑处理.但是做为在JSP技术一员,它还有以下特点:
  ★ 可以在JSP语句或者JavaScript脚本语句中使用EL.
  ★ 可以获得pageContext隐含对象,并且可以通过它来引用其他隐含对象.
  ★ 可以访问一些变量,JAVABEAN类的属性或嵌套属性和集合对象.
  ★ 可以直接访问JSP中的所有隐含对象.

语法格式

   1.所有的EL表达式都是以"${" 开始,以"}" 结尾的  如:
变量:  String username="Lionest";

表达式:${username} 的值就是"Lionest"

   如果在EL表达式中没有指定要查找变量的范围,则JSP容器会先从 page范围开始找,然后是 request ,session,application .直到找到为止,否则直接返回null.

  2.在EL中,使用到的变量作用范围名称是在变量作用范围+"scope" 如, ${pageScope.x} 表示在page范围的x变量的值 ,同样也可以有 requestScope ,sessionScope,applicationScope.

   3.EL中可以使用以下几种类型:
    Boolean:   true   ,  false      如 ${true}
    String:   由单引号或者双引号限定的字符串,如遇到单引号或双引号,反斜杠时  可以用"/"放在前面做为转义符.
                  如:%{"Lionest"} ,${/"} ,${//}
    Integer:  正整数或者负整数    如:${21} ,${-2}
    Float Point:  所有正的或负的浮点数.    如: ${-1.445} ,${1.18e}
    Null: 直接返回null

   4.EL中的运算符
   " [ ] "  和"  . "
(1)这两个运算符是用来获得变量的属性值, 如 : ${user.name}  ${user[name]} 返回值都是一样的.

(2)在所引用的变量的属性中带有特殊字符的 如; " _"  ," %"," ^ ",就要使用" [] "运算符  如: ${user[id_addr]}

(3) " [ ] " 运算符还可以读取Map  ,List ,Array 等集合中的值:
如: int[] numbers={1,2,3,4,5,6,7};

表达式:${numbers[0]} 的值就是  "1"
           ${numbers[3]} 的值就是  "4"
(4) 还有一种情况也要必须使用  " [ ] "  ,而非" ."   当所引用的变量的属性本身就是一个变量时:
如: String id="lionest";
     ${user[id]}

应用实例

我们这里只说一下难度较深的EL如何使用隐含对象和调用自定义函数  ,其他的简单的关系运算和数学,逻辑处理等.
在EL中 定义了11个隐含对象(JSP中是9个) ,其中JSP和EL共有一个对象那就是无所不能的pageContext对象.
下面介绍一下这些对象,

  类别                      对象名                                          描述
--------------------------------------------------------------------------------------------------------------------------------------------
JSP                      pageContext                       当前JSP页面的Javax.servlet.jsp.PageContext对象

作用域                  pageScope                         页面范围内所有对象的集合   
                             requestScope                     所有请求范围内对象的集合
                             sessionScope                     所有会话范围内对象的集合
                             applicationScope               整个WEB应用内对象的集合

请求参数               param                                所有请求参数字符串组成的集合
                             paramValues                     所有作为字符串集合的请求参数

请求头                  header                                HTTP请求头部,字符串
                             headerValues                     HTTP请求头部,字符串集合

cookie                  cookie                                 所有cookie组成的集合

初始化参数           initParam                            全部应用参数名组成的集合
---------------------------------------------------------------------------------------------------------------------------------------------

EL中可以调用以上对象的方法和属性进行相应的数据处理.


最后介绍一下 ,EL中如何调用自定义函数.

首先要创建一个自定义函数类,和JAVABEAN有毫象,此类的方法必须是公开的,静态的:
example

public class Convert{
pirvate String result="";
public static String  convert(String str) {

result=new String(str.getBytes("utf-8"),"GBK")

return result;
}
}

这是一个字符编码转换的一个类,它只有一个静态方法,是为了能不创建其对象就可以引用它.

然后再定义一个tld文件.和自定义标签差不多.

<?xml version="1.0" encoding="GB2312"?>
<!--
    Document   : convert.tld    Created on : 2007/7/30
    Author     :
    Description:
        Purpose of the document follows.
-->
<taglib 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  http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
      version="2.0">
      <description>Convert String </description>
      <display-name>Convert function</display-name>
      <tlib-version>1.1</tlib-version>
      <short-name>convert</short-name>
      <uri>http://java.sun.com/jsp/jstl/convert</uri>
      
      <function>
       <description>将字符串转换成中文编码</description>
       <name>convert</name>
       <function-class>Convert</function-class>
       <function-signature>java.lang.String convert(java.lang.String)</function-signature>
       <example>
         ${Convert:convert("加油!你是最棒的")}
       </example>
      </function>
</taglib>

把这个tld文件放在自定义标签的文件中,通常在 WEB_PROJECT/WEB-INF/tlds下.然后建立一个JSP页面进行测试
test.jsp

<% @ page  c %>
<% @ page isELIgnored="false"%>
<% @ taglib prefix="convert" uri=http://java.sun.com/jsp/jstl/convert%>
<html>
<head>
<title>Test the Function</title>
</head>
<body bgcolor="#FFFF00">
Before :${"客官打尖还是住店?"}
After:    ${convert:convert("客官打尖还是住店?")}
</body>
</html>

打开IE浏览器 运行该页面就会看到结果.
Before :(后面是乱码)
After:   (后面则是) 客官打尖还是住店?
 
原创粉丝点击