|
简介
定义:表达式语言(Expression Language)是JSP2的一个重要特性,不同于编程语言,它仅仅是一种数据访问语言。
作用:可替代JSP脚本,简化JSP开发;统一JSP文件的格式。
语法格式:${expression}
使用
EL支持大多数算术运算符和逻辑运算符
${2 + 3} //打印结果为5 (表达式语言把所有数值都当成浮点数处理)
${2 < 3} //打印结果为true (也用于字符之间、字符串之间的比较,会根据其对应的Unicode值来判断大小)
EL表达式的内置对象
//pageContext:代表该页面的pageContext对象,与JSP的pageContext内置对象相同。
//pageScope:用于获取page范围的属性值。
//requestScope:用于获取request范围的属性值。
//sessionScope:用于获取session范围的属性值。
//applicationScope:用于获取application范围的属性值。
//param:用于获取请求的参数值。
//paramValues:用于获取请求的参数值,与param的区别在于,该对象用于获取属性值为数组的属性值。
//header:用于获取请求头的属性值。
//headerValues:用于获取请求头的属性值,与header的区别在于,该对象用于获取属性值为数组的属性值。
//initParam:用于获取请求Web应用的初始化参数。
//cookie:用于获取指定的Cookie值。
下面实例代码展示了param、sessionScope、cookie的简单使用。
<body>
<form action="index.jsp" method="post">
字符串 = <input type="text" name="name" /> <input type="submit"
value="提交" />
</form>
<%
session.setAttribute("user", "jujianfei");
Cookie c = new Cookie("pwd", "123");
c.setMaxAge(24 * 3600);
response.addCookie(c);
%>
<!--获取提交的name值 -->
name的值为: ${param['name']}<br>
<!-- 获取session中user的值 -->
session中user的值为:${sessionScope['user']}<br>
<!-- 获取cookie中pwd的值 -->
cookie中pwd的值为:${cookie["pwd"].value}<br>
</body>
EL的自定义函数
如果需要在EL中进行更复杂的处理,就可以通过EL函数来完成,其本质是:Java类的静态方法。具体操作分三步:
1、新建一个Java类,在类中写一个静态方法reverse(),代码如下:
package cn.jujianfei.test;
public class Test {
//对字符串进行反转
public static String reverse(String text){
return new StringBuffer(text).reverse().toString();
}
}
2、编写标签库描述文件。在WEB-INF目录下新建一个扩展名为.tld的文件,代码如下:
<?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">
<tlib-version>1.0</tlib-version>
<short-name>el</short-name>
<!-- 定义该标签库的URI -->
<uri>/tags</uri>
<!-- 定义第一个函数 -->
<function>
<!-- 定义函数名:reverse -->
<name>reverse</name>
<!-- 定义函数的处理类 -->
<function-class>cn.jujianfei.test.Test</function-class>
<!-- 定义函数的实现方法-->
<function-signature>java.lang.String reverse(java.lang.String)</function-signature>
</function>
<!-- 如果还有其他函数,按照第一个函数的定义格式,新起一个function标签即可 -->
</taglib>
3、在JSP文件中引用标签库,并调用定义的EL函数,完成功能。
<!-- 引入标签库 -->
<%@ taglib prefix = "el" uri="/tags" %>
<body>
<form action="index.jsp" method="post">
字符串 = <input type="text" name="name" />
<input type="submit" value="提交" />
</form>
调用EL函数:${el:reverse(param["name"])}
</body>
扩展
在项目中定义文件路径经常会用到这个表达式:${pageContext.request.contextPath},它的作用是取出部署的应用程序名。例如:在一个名称为shop的Web项目中,${pageContext.request.contextPath}/index.jsp就是表示http://localhost:8080/shop/index.jsp。也可以使用脚本的写法:<%=request.getContextPath()%>,效果一致。
总结
在jsp文件中,也可以设置是否禁用EL。<%@ page isELIgnored="true" %>表示禁用,此属性默认为false。
程序猿的技术大观园:www.javathinker.net
|
|