表达式是JSP2的一个重要特性,它是仅仅是一种数据访问语言,可以方便地访问应用程序的数据,避免使用JSP脚本。
注:如果想系统认为$是符号,则需要在前面加转义字符"\"
1、表达式语言支持算术运算符和逻辑运算符。
2、表达式语言有11个内置对象
pageContext
pageScope
requestScope
sessionScope
applicationScope
param
paramValues 属性值为数组
header 请求头的属性值
headerValues 数组
initParam Web应用初始化参数
cookie
3、表达式语言的自定义函数
表达式语言除了可以使用基本的运算符外,还可以使用自定义函数。通过自定义函数,能够大大加强表达式语言的功能。自定义函数的开发步骤非常类似标签的开发步骤,定义方式也几乎一样。区别在于自定义标签直接在页面上生成输出,而自定义函数则需要在表达式语言中使用。
注:函数功能大大扩充了EL的功能,EL本身只是一种数据访问语言,因此它不支持调用方法。如果需要在EL中进行更复杂的处理,就可以通过函数来完成。函数的本质是:提供一种语法允许在EL中调用某个类的静态方法。
下面介绍表达式语言中自定义函数的开发步骤。
1)开发函数处理类:函数处理类就是函数类,这个普通类中包含若干个静态方法,每个静态方法都可以定义成一个函数。实际上这个步骤也是可省略的——完全可以直接使用JDK或者其他项目提供的类,只要这个类包含静态方法即可。
public class Functions
{
public static String reverse(String text)
{
return new StringBuffer(text).reverse().toString();
}
public static int countChar(String text)
{
return text.length();
}
}
2)使用标签库定义函数:定义函数的方法与定义标签的方法大致相似。增加标签是在<taglib.../>下添加<tag.../>元素,而添加函数则是
添加<function.../>
<?xml version="1.0" encoding="GBK" ?> <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 web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- TLD版本 --> <tlib-version>1.0</tlib-version> <!-- 标签库的名称 --> <short-name>mytaglib</short-name> <!-- 标签库的URI,唯一 --> <uri>http://www.crazyit.org/mytaglib</uri> <!-- 定义EL函数 --> <function> <!-- 定义函数名 --> <name>reverse</name> <!-- 定义函数的处理类 --> <function-class>org.test.Functions</function-class> <!-- 定义函数的实现方法 --> <function-signature>java.lang.String reverse(java.lang.String)</function-signature> </function> </taglib>
3)在JSP页面的EL中使用函数:一样需要先导入标签库,然后再使用函数。
<!-- 指定错误页面error.jsp -->
<%@ page language="java" errorPage="error.jsp" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page import="java.util.*" %>
<%@ page import="org.test.*" %>
<!-- 如果想要支持EL语言必须把这个EL支持打开,否则默认是不支持的
如果想整个服务下都支持,则需要在Web服务器上设置
-->
<%@ page isELIgnored="false" %>
<!-- 1、引入需要使用的标签库,uri是标签库的唯一标识,prefix为前缀 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pageContext测试</title>
</head>
<body>
<!-- 使用EL自定义函数 -->
<span>${mytag:reverse('abc') }</span>
</body>
</html>