为方便的获得WEB应用程序的相关数据,EL表达式语言定义了一些隐含对象。隐含对象共有11个对象,(JSP中具有9个隐含对象,EL比JSP中具有更多的隐含对象,这样EL比JSP更方便的获取数据) 使用这些对象可以很方便的访问Web 程序数据。

隐含对象包括Session(获得当前web程序的Session值),cookie(获得WEB程序的Cookie值),header,headerValues(获得用户的Http数据访问头部信息),Param和ParamValues(获得用户提交数据参数)等。

使用${隐含对象名称["元素"]} 就可以获得这个值了,例如${header("host")} 可以显示http头部中host的值,${param("username")},可以获得显示用户表单提交的用户. 使用${empty(param("username")} 可以判断用户提交表单是否为空等。(这样比jsp1.2中使用request.getParamter("username") 要简化和方便很多了)

 

隐含对象及隐含对象访问实例

EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,HttpHeader,用户提交表单(param)等

隐含对象 内容

applicationScope 应用程序范围内的scoped变量组成的集合

cookie 所有cookie组成的集合

header HTTP请求头部,字符串

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

initParam 全部应用程序参数名组成的集合

pageContext 当前页面的javax.servlet.jsp.PageContext对象

pageScope 页面范围内所有对象的集合

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

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

requestScope 所有请求范围的对象的集合

sessionScope 所有会话范围的对象的集合

下面是获取HTTP访问头部数据和用户提交数据的示例

EL表达式 运算结果

${header["host"]} 这里得到HTTP连接头部的host值

${header["accept"]} 这里获得HTTP头部的accept值

${header["user-agent"]} 这里获得HTTP头部的user-agent值

 

访问应用程序数据

除了可以方便的访问内置的隐含对象外,EL还可以方便的到应用程序数据,访问应用程序数据使用两种方式 . (点号运算符)访问对象的属性,也可以使用[] 来访问数组元素(实际上EL中访问隐含对象数据也是使用这两种方式的)

表达式${data}表示名为data的scoped变量。可以使用点号(.)或方括号([])运算符从集合中检索属性值:(两种数据访问方式演示)

点号运算符用于访问命名的属性,比如表达式${customer.name}表示scoped变量customer的name属性;

方括号运算符可用于检索命名的属性,比如在${customer[“name”]}中。也可以通过${customers[0]}的形式来访问集合customers中的第一项。

EL表达式语言同时还统一了对点号和方括号运算符的处理,因此${customer.name}与${ customer[“name”]}是等价的。

以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&alies=now.net.cn(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用"."来进行访问,两种访问效果是一样的。)

  1. ${param["name"] } myname    
  2. ${param.name} myname    
  3. ${param["alies"] } now.net.cn    
  4. ${param.alies} now.net.cn   

 

 

 

访问应用程序数据需要进行以下几个步骤:

1.编写public类的static public 方法,只有static public的方法才能被标记表达试访问。

 

JSP2.0中定义和使用函数

表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。同时要将文件映射到TLD标志库文件中。

为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。

示例文件:Compute.java

  1. package jsp2.examples.el;    
  2. import java.util.*;    
  3. public class Compute {    
  4. public static int add(String x, String y) {    
  5. int a = 0;    
  6. int b = 0;    
  7. try {    
  8. a = Integer.parseInt(x);    
  9. b = Integer.parseInt(y);    
  10. }catch(Exception e) {}    
  11. return a + b;    
  12. }    
  13. }   

 

 

2.将方法映射到TLD表中

配置标记库描述文件 函数描述符

  1. < function>    
  2. < description>add x and y< /description>    
  3. < name>add< /name>    
  4. < function-class>jsp2.examples.el.Compute    
  5. < /function-class>    
  6. < function-signature>int    
  7. add(java.lang.String,java.lang.String)    
  8. < /function-signature>    
  9. < /function 

现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。

3.在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了

代码示例5: math.jsp

 

  1. < %@ taglib prefix="my"    
  2. uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>    
  3. < HEAD>    
  4. < TITLE>Functions< /TITLE>    
  5. < /HEAD>    
  6. < BODY>    
  7. < H3>Add Numbers< /H3>    
  8. < P>    
  9. < FORM action="math.jsp" method="GET">    
  10. X = < input type="text" name="x" value="${param["x"]}">    
  11. < BR>    
  12. Y = < input type="text" name="y" value="${param["y"]}">    
  13. < input type="submit" value="Add Numbers">    
  14. < /FORM>    
  15. < P>    
  16. The sum is: ${my:add(param["x"],param["y"])}    
  17. < /BODY>    
  18. < /HTML>