开发者社区> firesun> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

11.表达式语言

简介: 1.EL简介 EL(Expression Language): 表达式语言在JSP2.0之后,EL正式纳入标准,只要是支持Servlet2.4/JSP2.0的容器,可以直接在JSP页面中使用ELEL语法简单,使用方便,在很多地方可代替JSP标签输出page、request、session、appli...
+关注继续查看

1.EL简介

EL(Expression Language): 表达式语言
在JSP2.0之后,EL正式纳入标准,只要是支持Servlet2.4/JSP2.0的容器,可以直接在JSP页面中使用EL
EL语法简单,使用方便,在很多地方可代替JSP标签
输出page、request、session、application范围的数据

JSP表达式的代码:
The outside temperature is<%= temp%> degrees
表达式语言(EL)表达式的代码:
The outside temperature is ${temp} degrees‘

EL是一个完全独立的拥有操作符、语法和保留字的编程语言

EL隐含对象: 

EL隐含对象有11个,与JSP的9个隐含对象区分开
与范围有关的
applicationScope:
sessionScope:
requestScope:
pageScope:
与输入有关的
param:
paramValues:
其他隐含对象
cookie:
header:
headerValues:
initParam:
pageContext

*通过pageContext对象可以访问到 application、session、request 等对象,如:
${pageContext.out.bufferSize}
${pageContext.request.method}
但是,表达式限制开发人员调用Java方法,所以下面的表示是非法的:
${pageContext. request.getMethod()}
但用JSP表达式是合法的:
<%= request.getMethod()%>

EL中的隐含对象:

内置对象

描述

pageContext

用于访问JSP内置对象

pageScope

代表page作用域对象

requestScope

代表request作用域对象

sessionScope

代表session作用域对象

applicationScope

代表application作用域对象

param

代表请求参数对象

paramValues

代表所有请求参数对象

header

代表请求头对象

headerValues

代表所有请求头对象

cookie

代表Cookie对象

initParam

相当于ServletContext.getInitParameter(String name)

EL变量:

EL存取变量数据的方法很简单,如${user}
意思是取出某一范围中名称为user的变量
默认的范围查找顺序(自动搜索顺序)
Page Request Session Application
也可以指定范围
${pageScope.user}
${requestScope.user}
${sessionScope.user}
${applicationScope.user}

EL保留字:

变量命名不得使用EL保留字,以免程序编译时发生错误

 

and

eq

gt

true

or

ne

le

false

no

lt

ge

null

instanceof

empty

div

mod

2.表达式语言运算符

属性访问运算符.
例如a.b代表a对象的名为b的属性
${header.host}

集合访问运算符[]
例如a[b]代表集合a的关键字为b所指向的元素
${header[“host”]}

有时两者所代表的意思是一样的,如
${sessionScope.user.sex} 等价于${sessionScope.user[“sex”]}
两者也可混合使用,如
${sessionScope.shoppingCart[0].price}
以下两种情况,两者会有差异
当要存取的属性名称中包含一些特殊字符,象”.”或”-”等并非字母或数字的符号,一定要用[],如
${user.My-Name}应写为${user[“My-Name”]}
如想动态的取值时,也要使用[],如
${user[data]},data相当于一个变量

算术运算符

运算符名称

符号

加运算

+

减运算

-

乘运算

*

除运算

div和/

取余运算

mod和%

关系与逻辑运算符:

关系运算

运算符

注意

相等

== 和 eq

使用EL关系运算符,

不可以写成:

${a.pass}==${a.pass2}

${ ${a.pass}==${a.pass2}}

应该写成

${a.pass == a.pass2}

示例:Demo 04-02示例

不相等

!= 和 ne

小于

< 和 lt

大于

> 和 gt

小于或等于

<= 和 le

大于或等于

>= 和 ge

逻辑运算

运算符

逻辑与

&& 和and

逻辑或

|| 和or

逻辑非

!和not

其他运算符:

empty: 判断值是否为null或空的
${ empty param.name}
条件运算符: 三元运算符,A? B:C
也就是当A为true时,执行B,否则执行C
${A? B:C}
括号运算符: 用来改变执行优先权
${A *(B+C)}

3.表达式语言函数

自定义EL语言函数需要包括创建、修改以下四个文件

 1.编写方法所在源文件.java文件    该文件包含EL函数实现

 2.编写标签库描述符.tld文件          定义EL函数名

 3.修改部署描述符 web.xml         定义标签库描述符地址

 4.编写JSP文件                           

使用EL函数

具体实现步骤实例:

编写一个EL函数,接收一个字符串参数,函数的返回结果是字符串大写
编写一个EL函数,输入一个字符串,返回该字符串的长度,如:输入abc,输出3

1、编写方法所在源文件

方法声明为public、static,不需要创建类的实例就可以访问方法
方法的返回值和参数必须是EL内有效的

public class StrMethods {
    public static String upper(String x) {
        return x.toUpperCase();
    }

    public static int length(String x) {
        return x.length();
    }
}

2.编写标签库描述符

<function></function>必须成对出现
<name></name>用于指定EL语言函数名称
<function-class></function-class>用于指定Java方法所在的类名
<function-signature></function-signature>用于指定静态方法及其参数和返回类型
tld文件通常放在/WEB-INF子目录下

<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/j2eeweb-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <function>
        <name>upper</name>
        <function-class>com.StrMethods</function-class>
        <function-signature>java.lang.String upper(java.lang.String)
        </function-signature>
    </function>
    <function>
        <name>length</name>
        <function-class>com.StrMethods</function-class>
        <function-signature>java.lang.int length(java.lang.String)
        </function-signature>
    </function>
</taglib>

3.修改部署描述符

web.xml文件中<web-app></web-app>节点内加入jsp-config 标签,然后在其中加入<taglib></taglib>标签(新版本的Servlet规范中<taglib>标签被包含在<jsp-config>标签内)
<taglib-uri></taglib-uri>用于描述JSP文件中使用的标签库描述符的URI地址
<taglib-location></taglib-location>用于描述标签库描述符的实际物理位置

 <jsp-config>  
    <taglib>  
        <!-- 配置标签的引用地址 JSP页面中引用时使用-->  
        <taglib-uri>/Functions</taglib-uri>  
        <!-- 配置标签的TLD文件地址 -->  
        <taglib-location>
             /WEB-INF/Functions.tld
        </taglib-location>  
    </taglib>  
  </jsp-config>

4.编写JSP文件调用EL函数

使用taglib指令访问tld文件,并添加一个代表标签库的前缀名
使用tld前缀和函数名创建EL的表达式,使用正确数据类型参数

<%@ taglib uri="/Functions" prefix="el" %><body>  
${el:upper(param.userName)} 
</body>  

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
正则表达式引例
正则表达式引例
45 0
P4语言
官网:https://p4.org/ github:https://github.com/p4lang/tutorials   相关文章: P4语言编程快速开始:https://www.sdnlab.com/18072.
1284 0
《C语言程序设计》一 2.3 运算符和表达式
本节书摘来自华章出版社《C语言程序设计》一 书中的第2章,第2.3节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1412 0
汇编语言 整数的计算表达
     整数有两种表达方式:有符号和无符号。无符号数及正整数,它的表达方法很直接。例如整数200表达为一个字节的无符号整数,对应的二进制值为:11001000      有符号整数表达起来比较复杂一些。例如 -56,+56表达起来很简单,  可以表达为:00111000.     而-56在纸
1605 0
c语言中逗号运算符和逗号表达式
原文:c语言中逗号运算符和逗号表达式  C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:  3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为         表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。
965 0
C/C++ 语言中的表达式求值
在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5: ...
667 0
正则表达式语法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
484 0
+关注
35
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载