EL表达式的简单使用
1、EL简介
?
1)语法结构
${expression}
2)[]与.运算符?
EL 提供.和[]两种运算符来存取数据。
???? 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如: ${user.my-name}应当改为${user["my-name"]} 。如果要动态取值时,就可以用[]来做,而.无法做到动态取值,例如:${sessionScope.user[data]}中data 是一个变量。
3)变量
????EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
???? 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
???? 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
???????? 属性范围???????在EL中的名称????????????????解释
????????page????????????pageScope??????????????表示页面范围的变量。
????????request?????????requestScope?????????表示请求对象的变量。
????????session?????????sessionScope?????????表示会话范围内的变量。
????????application????applicationScope?????表示应用范围的变量。
注意:任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。必须注意,如果在字符串两端使用双引号,则单引号不需要转义。
4)
1--EL表达式用${}表示,可用在所有的HTML和JSP标签中,作用是代替JSP页面中复杂的JAVA代码。
2--EL表达式可操作常量、变量和隐式对象。 最常用的隐式对象有${param}和${paramValues}。其中${param}表示返回请求参数中单个字符串的值。${paramValues}表示返回请求参数的一组值。
3 --<%@page isELIgnored="true"%> 表示是否禁用EL语言,true表示禁止.false表示不禁止。JSP2.0中默认的启用EL语言。
4-- EL语言可显示逻辑表达式。如:
${trueand false}结果是false????
关系表达式如${5>6} 结果是false????
算术表达式如 ${5+5} 结果是10
5--EL中的变量搜索范围是:page—>request—>session—> application??
点运算符(.)和"[ ]"都是表示获取变量的值,区别是[ ]可以显示非词类的变量。
?
2、EL隐含对象
1)与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下4个:pageScope、requestScope、sessionScope 和applicationScope;它们基本上就和JSP的pageContext、request、session和application一样;在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(Stringname),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
???? session.getAttribute("username") 取得username的值,
在EL中则使用下列方法
???? ${sessionScope.username}
2)与输入有关的隐含对象
与输入有关的隐含对象有2个:param和paramValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
???? request.getParameter(String name)
???? request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
???? ${param.name}
???? ${paramValues.name[index]}
?
3.其他隐含对象
1)cookie
JSTL并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为username的值,可以使用${cookie.username}来取得它。
2)header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在极少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
3)initParam
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid =(String)application.getInitParameter("userid");
???? 可以使用 ${initParam.userid}来取得名称为userid
4)pageContext
pageContext取得其他有关用户要求或页面的详细信息。
????${pageContext.request.queryString}????????取得请求的参数字符串
????${pageContext.request.requestURL}????????取得请求的URL,但不包括请求之参数字符串
????${pageContext.request.contextPath}????????服务的web application 的名称
????${pageContext.request.method}??????????????取得HTTP 的方法(GET、POST)
????${pageContext.request.protocol}????????取得使用的协议(HTTP/1.1、HTTP/1.0)
????${pageContext.request.remoteUser}????????取得用户名称
???? ${pageContext.request.remoteAddr }????????取得用户的IP 地址
????${pageContext.session.new}????????????判断session 是否为新的
????${pageContext.session.id}??????????????取得session 的ID
???? ${pageContext.servletContext.serverInfo}?? 取得主机端的服务信息
?
4、条件标签
1.算术运算符有五个:+、-、*、/或div、%或mod
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
???? 例:${empty param.name}、${A?B:C}、${A*(B+C)}
?
5、JSP2.0中EL扩展表达式语言的设置
有了JSP2.0,就可以使用EL扩展表达式了。对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL,请设置为isELIgnored=true;
<%@ page isELIgnored="true|false"%>?
对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL的);
<jsp-property-group>
<description>property group for JSPConfiguration.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>/jsp/*</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GB2312</page-encoding>
<scripting-invalid>true</scripting-invalid>
<include-prelude>/include/prelude.jspf</include-prelude>
<include-coda>/include/coda.jspf</include-coda>
</jsp-property-group>
?6、JSP2.0中定义和使用函数
?1)
表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的publicstatic方法编写。同时要将文件映射到TLD标志库文件中。
???? 为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。
示例文件:Compute.java
packagecom.itttop.test;??
importjava.util.*;??
publicclass Compute {??
public static int add(String x, String y) {??
int a = 0;??
int b = 0;??
try {??
a = Integer.parseInt(x);??
b = Integer.parseInt(y);??
}catch(Exception e) {}??
return a + b;??
}??
}?
用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。
2)将方法映射到TLD表中
配置标记库描述文件,函数描述符
<function>??
< description>add x and y< /description>??
< name>add< /name>??
< function-class>com.itttop.test.Compute < /function-class>??
< function-signature>intadd(java.lang.String,java.lang.String) < /function-signature>??
</function>??
现在我们就可以编写一个JSP页面来使用这个函数。下面的代码示例是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。
3)在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。
代码示例: math.jsp
<%@ taglib prefix="my"? uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib%>??
<HTML>?
< HEAD>??
< TITLE>Functions< /TITLE>??
< /HEAD>??
< BODY>??
< H3>Add Numbers< /H3>??
< P>??
< FORM action="math.jsp"method="GET">??
X = < input type="text" name="x"value="${param['x']}">??
< BR>??
Y = < input type="text" name="y"value="${param['y']}">??
< input type="submit" value="AddNumbers">??
< /FORM>??
< P>??
The sum is: ${my:add(param['x'],param['y'])}??
< /BODY>??
</HTML>?
?
?