EL表达式语法介绍
1.1 EL表达式:
EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。
EL表达式被解析成数值表达式和方法表达式。其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。一旦被解析之后,表达式能够被优化地计算一次或多次。
下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述
1.1.1Eval-expression
Eval-expression是以使用${expr}或者#{expr}结构的形式构成。两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。而${expr}这种界
定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式
当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:
以下面这个例子为例:
id="email" value="#{checkOutFormBean.email}" size="25"maxlength="125" validator="#{checkOutFormBean.validateEmail}"/> 当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateEmail}作为一个数据接口 的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。因此,表达式的结果表现成一个数据结构的引用,或者为一个左值。 在翻译阶段,那个相同的表达式被计算,它产生特殊值关联右值对象,作为JSP实例。 一个左值合法语法是右值合法语法的子集。在特殊情况,一个左值只能由单个变量(比如${name})或者一个从某个对象中解析属性的组成,通过. 或[]操作符(比如${employee.n ame} 在解析取值表达式时,一个预期的类型是被提供的。拿右值为例,预期的类型是表达式计算被强制的结果。以左值为例,预期的类型是被忽略的,并且在属性被设置之前,提供的值是被强制为一个表达式指向实际的属性类型。在后面提供了类型转换 1.1.1.2作为方法表达式的计算表达式 在某种情况,计算表达式会描述成引用一个方法而不是模型对象。 比如,在JSF中,组建标记也提供了引用方法的属性的集合,这些方法能够执行特定为组建标签关联的函数。为了支持这些类型的表达式,EL定义了方法表达式(ELclass MethodE xpresssion) id="email" value="#{checkOutFormBean.email}" size="25"maxlength="125" validator="#{checkOutFormBean.validateEmail}"/> 以上面的例子,validator属性使用了关联方法表达式类型的表达式。做为一个取值表达式,表达式的计算(调用函数) 被延期并且在生命周期内的合理的瞬间能够被底层的技术处理。 方法表达共享相同的左值语法,它只能由单个变量(比如${n ame})或者一个从某个对象中解析属性的组成,通过. 或[]操作符(比如${https://www.360docs.net/doc/057751990.html,})。关于预期返回值类型和参数类型的信息提供在方法被解析的时候。 方法表达式被计算在其引用的方法的调用时候或者获取引用的方法信息。计算之上,ELAPI 验证方法必须一致于预期方法的签名在解析时候。因此,没有方法表达式的强制 1.1.2字面表达式 一个字面表达式不使用${expr}或者#{expr}结构并且简单地计算String类型文本表达式。在EL上,一个预期某个类型不止提供String。比如: 表达式:Aloha!类型:String 结果:Aloha! true Boolean Boolean.True 为了生成字面值包括字符串"${"或者"#{",开发人员能够选择使用组合表达式比如下面: ${'${'}exprA} #{'#{'}exprB},这里结果是${exprA}和#{exprB}。 两者选一个,使用转义字符\$和\#能够被用于转义,否则,会被处理为取值表达式。 \${exprA} \#{exprB},这里结果是${exprA}和#{exprB}。 字符表达式能够用在任何取值表达式使用的地方。一个字符表达式也能使用一个必须要有返回值的方法。若他们的返回值不是String类型,他们会强制类型转换。 1.1.3.组合表达式: 在多个EL表达式被组合一起的地方,EL也支持组合表达式。取值表达式从左到右北计算,强制成String类型,并且连接任何一个插入字面表达式。 举个例子,组合表达式"${firstName}${lastName}"是由三个EL表达式组合而成,取值表达式"${firstName}"、"${lastNa me}",表达式""。 一旦EL计算,结果会按照EL类型转换规则把从预期的类型强制成String类型。 混合${}和#{}的结构在组合表达式中是非法的。这种限制的导入是为了避免用户想要使${expr}还是#{expr}指令来计算 表达式的含糊不清。举个例子,前面我们提到了,${}是直 接计算并且#{}是延迟计算在J2EEweb层规范的协定中,这 就意味这EL表达式在J2EEweb层,开发人员不能强制直接计算那些组合表达式和间接计算的其余部分。这种限定可能会在未来的版本中回取消,从而为更高级的EL应用模式得 到允许。 组合表达式能够在任何EL表达式除了方法表达式之外的地 方使用。仅仅单个取值表达式中能解析方法表达式。 1.1.4.语法约束 取值表达式精确地被解析和被计算,在底层的技术导入约束,在EL表达式出现时,语法在使用遵循这些约束。 比如,在JSP2.1,#{}表达式都只能使标签属性接受延迟表 达式才被允许,若使用#{}在其他的地发挥报错误。 1.2. 字面值 有一些字面值作为boolean,integer,floatingpoint,string和n ull类型在取值表达之中。 Boolean true 和false Integer - 参看integerLiteral Floating point -参看FloayPointLiteral String - 单引号和双引号' 转义成\', " 转义成\",和\ 转义 成\\。引号只是需要需要转义在string封装值在相同的引号类型。 1.3. 错误,警告、默认值 表达式语言已经被设计出来作为web表示层应用程序。在使用时,经验建议最重要的是能够提供尽可能好的表述来设计,甚至在页面中有的一点错误。为了达到这个需求,EL不提 供警告,只是提供默认值和错误。默认值都是类型正确的值,这些值被子表达式赋值当有问题时候。一个错误是异常的抛出(通过EL使用的环境来处理异常)。 1.4.解析模型对象和他们的属性 一个核心的概念在EL中,就是计算模型对象名称到一个对象,并且在一个表达式中分离属性应用于对象(操作符. 和[])。 EL API提供一个一般化机制,解析器,通过底层技术实现并且定义了规则,它管理模型对象名称的解析和他们关联属性。 1.5. 操作符[]和. EL遵照的ECMAScript来统一处理.和[] 操作符 expr-a.identifier-b 等于expr-a["identifier-b"];验证器identifier -b被用于构造一个字面的值作为一个验证器。 计算expr-a[expr-b]: ?计算expr-a的值放到value-a。 ?若vaule-a等于null: 如果expr-a[expr-b]作为末尾的一个属性被解析: 若表达式一个值表达式并且ValueExpression.getValue(contex t)被调用 ,作为初始化表达式计算,返回null。 否则,抛出PropertyNotFoundException的异常.(尝试着去分离引用null 作为左值) 否则,返回null ?计算expr-b的值放到value-b ?若value-b等于null; o如果expr-a[expr-b]作为末尾的一个属性被解析: ?若表达式是一个取值表达式并且ValueExpression.getVa lue (context)方法被调用去初始化表达式 的计算,返回null。 ?否则,抛出一个PropertyNotFoundException. ?否则返回一个null 若表达式是一个取值表达式: ?如果expr-a[expr-b]作为末尾的一个属性被解析: ?若ValueExpression.getValue(context)方法被调用去初始化表达式的计算,则调用elResolver.getValue(conte xt.value-a,value-b)方法。 ?若ValueExpression.getType(context)方法被调用,调用elResolver.getType(context,value-a,value-b)方法。 ?若ValueExpression.isReadOnly(context)方法被调用,则调用elResolver.isReadOnly(context,value-a,value-b) 方法。 ?若ValueExpression.setValue(context,val)被调用,则调用elResolver.setValue(context,value-a,value-b,val)方法。 ?否则,调用elResolver.getValue(value-a,value-b)。 否则,表达式则是一个方法表达式: o若expr-a[expr-b]作为末尾的一个属性被解析: ?强制value-b转化成String。 ?在解析时,寻找对象vaule-a上的value-b方法和提供预想的方法参数类型集合。如果不存在这些,或者返回的类型不能匹配预想的回返类型(即方法签名不同),则抛出一MethodNotFoundException。 ?若MethodExpression.invoke(context,params)被调用,则通过传递过来参数来调用相应的方法。 ?若MethidExpression.getMethodInfo(context)被调用,构建和返回一个MethodInfo对象。 o否则,调用elResolver.getValue(value-a,value-b)。 1.6算术操作符号: 算术操作只被在Integer(BigInteger和Long)类型和浮点(BigD ecimal和双精度型)值.有五个操作符: 加法:+ 减法:- 乘法:* 除法:/and div 求余:%and mod 算术操作符的计算在下面的章节中描述。A和B作为计算的字表达式。 1.6.1 二元操作符- A {+ ,-,*} B ?若 A 和B 都是null,则返回(Long)0 ?若 A 或B 属于BigDecimal类型,或者都是,那么: o若操作符为+,返回a.add(b) o若操作符为-,返回a.subtract(b) o若操作符为*,返回a.multiply(b) ?若 A 或B 属于Float, Double,或者包含Stri ng,e或则E, o若A或B属于BigInteger类型,把A和B强制转化成Bi gDecimal类型并且应用操作符 o否则,A和B强制成Double类型并且申请操作符 ?若 A 或B 属于BigInteger类型,强制他们成为BigInteger类型,然后: o若操作符为+,返回a.add(b) o若操作符为-,返回a.subtract(b) o若操作符为*,返回a.multiply(b) ?否侧,把A和B强制成Integer,并且应用符操作符。 ?若操作符产生异常,那么报错误。 1.6.2 二元操作符- A {/,div} B ?若 A 和B 都是null,则返回(Long)0 ?若A 或B 一个属于BigDecimal或一个属于Big Integer,都强制成BigDecimal并且返回A.divde(B,BigDeci mal.ROUND_HALF_UP)。 ?否则,A和B都强制成为Double类型并且申请操作符 ?若操作符产生异常,那么报错误。 1.6.3 二元操作符- A {% ,mod} B ?若 A 和B 都是null,则返回(Long)0 ?若 A 或B 属于Float, Double,或者包含Stri ng。e或则E,都强制成Double并且申请操作符。 ?若 A 或B 属于BigInteger类型,都强制成BigI nteger返回A.remainer(B)。 ?否则强制成Long并且申请操作符。 ?若操作符产生异常,那么报错误。 1.6.4 一元操作符-A ?若 A 是null,则返回(Long)0 ?若 A 属于BigDecimal类型或则BigInteger类型,或则A.negate()。 ?若 A 是String类型: o若A 含有e或E,强制成Double类型并申请操作符 o否则强制成Long类型并申请操作符 o操作符产生异常,那么报错误。 ?若A属于Byte,Short,Integer,Long,Float,D ouble o保留原类型,并且申请操作符 o若操作符产生异常,那么报错误。 否则,报错误 1.7 关系操作符 == 和eq != 和ne < 和lt > 和gt <= 和le <= 和ge 后面四种第二的版本符号提供使用是为了避免在XML语法 中中使用实体引用和含有相同的行为,比如<行为与lt一样,以此类推。 1.7.1 A { <, > <= , >= , lt , gt , le , ge } B o若 A == B , 若<= , le , >= 或者ge 返回true。 o若 A 或B 是null,return f alse o若 A 或B 属于BigDecemi al类型,他们都会强制转化成BigDecemial类型,并且使用https://www.360docs.net/doc/057751990.html,pareTo(B)方法的返回值作为返回值。 o若 A 或B 属于Float 或 Double 都强制成为Double类型并且申请操作符 o若 A 或B 属于BigInteger,都强制成BigInteger类型并且使用https://www.360docs.net/doc/057751990.html,pareTo(B)方法的返回值作为返回值。 o若 A 或B 属于Byte,Sho rt,Character,Integer,或者Long等类型都强制成为Lo ng类型并且申请操作符。 o若 A 或B 属于字符型强制成String 类型,比较字符: o若A属于Comparable类型,那么: 若https://www.360docs.net/doc/057751990.html,pareTo(B)抛出异常,错误。 ?否则利用https://www.360docs.net/doc/057751990.html,pareTo(B)结果 o若B属于Comparable类型,那么: ?若https://www.360docs.net/doc/057751990.html,pareTo(A)抛出异常,错误。 ?否则利用https://www.360docs.net/doc/057751990.html,pareTo(A)结果 o否则,报错误 1.7.2 A { == ,!=, eq , ne } B o若 A == B,申请操作 o若 A 或B 属于BigDecemial类型,他们都会强制转化成BigDecemial类型,然后: ?若操作符为== 或者eq ,返回A.equals(B) ?若操作符为!= 或者eq ,返回!A.equals(B) o若 A 或B 属于Float 或 Double 都强制成为Double类型并且申请操作符 o若 A 或B 属于BigInteger,都强制成BigInteger类型,然后: ?若操作符为== 或者eq ,返回A.equals(B) ?若操作符为!= 或者eq ,返回!A.equals(B) o若 A 或B 属于Byte,Sho rt,Character,Integer,或者Long等类型都强制成为Lo ng类型并且申请操作符。 1.1 EL表达式: EL表达式规定为:eval-expression和literal-expression,同时E L表达式支持Compositeexpressions,很多EL表达式(eval-ex pressions和literal-expressions)被聚合在一起。 EL表达式被解析成数值表达式和方法表达式。其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。一旦被解析之后,表达式能够被优化地计算一次或多次。 下面我们来分为:eval-expression、literal-expression、Compo siteexpressions来讲述 1.1.1Eval-expression Eval-expression是以使用${expr}或者#{expr}结构的形式构成。两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。 从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。而${expr}这种界 定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。 1.1.1.1作为取值表达式的计算表达式 当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。 右值比如: EL表达式总结 EL表达式总是用大括号括起,而且前面有一个美元符($)前缀:${expression}。 表示式中第一个命名变量要么式一个隐式对象,要么是某个作用域(页面作用域、请求作用域、会话作用域或应用作用域)中的一个属性。 点号操作符允许你使用一个Map键或一个bean性质名来访问值,例如,使用${foo.bar}可以得到bar的值,在此,bar是Map foo的Map键名,或者是bean foo的一个性质。放在点号操作符右边的东西必须遵循Java的标识符命名规则!(换句话说,必须以一个字母、下划线或美元符开头,第一个字符后面可以有数字,但不能有其他字符)。 点号右边只能放合法的Java标识符。例如,${foo.1}键就不可以。 []操作符比点号功能更强大,因为利用[]可以访问数组和List,可以把包含命名变量的表达式放在中括号里,而且可以做任意层次的嵌套,只要你受得了。 例如,如果musicList是一个ArrayList,可以用${musicList[0]}或${musicList[“0”]}来访问列表的第一个值。EL并不关心列表索引加不加引号。 如果中括号里的内容没有用引号引起来,容器就会进行计算。如果确实放在引号里,而且不是一个数组或List的索引,容器就会把它看作是性质或键的直接命名。 除了一个EL隐式对象(PageContext)外,其他EL隐式对象都是Map。从这些隐式对象可以得到任意4个作用域中的属性、请求参数值、首部值、 cookie值和上下文初始化参数。非映射的隐式对象是pageContext,它是PageContext对象的一个引用。 不要把隐式EL作用域对象(属性的Map)与属性所绑定的对象混为一谈。换句话说,不要把requestScope隐式对象与具体的JSP隐式对象 request混淆。访问请求对象只有一条路,这就是通过pageContext隐式对象来访问(不过,想从请求得到的一些东西通过其他EL隐式对象也可以得到,包括param/paramValues、header/headerValues和cookie)。 EL允许你调用一个普通Java类中的公共静态方法。函数名不一定与具体的方法名相匹配!例如,${foo:roolIt()}并不意味着包含函数的类中肯定有一个名为roolIt()的方法。 使用一个TLD将函数名(例如roolIt())映射到一个具体的静态方法。使用 EL和JSTL 主要内容 ?EL表达式 ?JSTL标签库 1.EL表达式 EL表达式又称为表达式语言(Expression Language),它是JSP中一个很重要的组成部分。在JSP页面中使用EL表达式,可以简化对变量和对象的访问。 EL表达式的语法非常的简单,所有的EL表达式都是以“${”开始,以“}”结束,比如${name}。EL表达式会将表达式中的结果在页面上输出,就像使用JSP的表达式结构或使用out内置对象进行输出一样。 EL表达式对运算符支持 使用EL表达式进行算术运算,在EL表达式中支持+、-、*、/、%运算,示例如下: 代码演示:EL表达式算术运算 <%@ page language="java" pageEncoding="UTF-8"%> 图1 EL表达式算术运算结果 在EL表达式中还可以支持关系运算符操作,示例如下: 代码演示:EL表达式关系运算符 EL: 简介: (Expression Language.) 作用:EL表达式存取变量数据。方便使用。 语法结构: ${ ……. } EL运算符: .与[] EL提供了.和[] 两个运算符存取数据 假设session变量为user的javaBean,有一个name属性,取值为${https://www.360docs.net/doc/057751990.html,} 或者${https://www.360docs.net/doc/057751990.html,er[“name”]} 算术运算符 有五个:+、-、*或$、/或dive、%或mod ${2+3} ${2/3}或${2 div 3} ${2%3}或${2 mod 3} 关系运算符 有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge ${5==5} ${5 eq 5} ${5 != 5} ${5 ne 5} 逻辑运算符 有三个:&&或and、||或or、!或not ${A &&B} ${A and B} ${A || B} ${!A} ${not A} 其它运算符 有三个:Empty运算符、条件运算符、()运算符 ${empty https://www.360docs.net/doc/057751990.html,} EL表达式语法介绍
EL表达式
EL表达式与JSTL
12 * 15 = ${12*15}
12 - 15 = ${12-15}
12 / 15 = ${12/15}
12 % 15 = ${12%15}
12<15 ${12<15}
12>15 ${12>15}
12<=15 ${12<=15}
12>=15 ${12>=15}
12!=15 ${12!=15} EL表达式除了支持普通的关系运算符外,还可以使用字符来表示关系运算符,下面的写法和上面使用普通关系运算符表示的顺序一一对应: 代码演示:EL表达式关系运算符 12==15 ${12 eq 15}
12<15 ${12 lt 15}
12>15 ${12 gt 15}
12<=15 ${12 le 15}
12>=15 ${12 ge 15}
12!=15 ${12 ne 15} EL表达式
el表达式的基本语法
·el表达式的基本语法 ${el表达式} 1) 第一种:访问bean的属性 a、${https://www.360docs.net/doc/057751990.html,} jsp引擎会依次从pageContext、request、session、application查找绑定名为"user" 的对象,如果找到了就不再向下查找,否则,继续向下查找。找到后。调用该对象的getName()方法,并输出 其值;找不到,则输出""(空)。 b、${user["name"]},效果相同 "name"表示字符串 c、或者也可以使用${user[propname]},注意不带引号表示变量 d、此外[]里面还可以以0 1这样的数字下标,作用是输出数组里面的元素值。 2)第二种:获取请求参数值 a、${https://www.360docs.net/doc/057751990.html,ername} 等价于request.getAttribute("username"); b、${paramValues.interest} 等价于request.getAttributeValues("interest"); 3)第四种:计算一个表达式,将结果作为标签的属性值或者直接输出。 a、算术运算+ -* % / 但是要注意的是+号不能连接字符串 b、关系运算== != < > >= <= 可以使用对应的"eq" "nq" "lt" "gt" "le" "ge" c、逻辑运算 && || ! 可以使用and or not d、empty运算 判断一个字符串是否为空,集合内容是否为空,以及绑定的对象是否存在 ·5核心标签的使用 1)使用步骤 需要将jstl标准标签库相关的jar文件copy到WEB-INF 的lib目录下 jstl.jar java stantard taglib stantard.jar 2)在件商品文件当中,使用taglib指令导入标签。 3)使用标签 a、
JSP中的EL表达式介绍
JSP 中的 EL 表达式介绍
一、JSP EL 语言定义
EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功 能。 脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码 的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。 JSP 2.0 将 EL 表达式添加为一种脚本编制元素。
二、JSP EL 简介 1、语法结构 ${expression} 2、[ ]与.运算符 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数 字的符号,就一定要使用“[ ]“。例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。 例如: ${https://www.360docs.net/doc/057751990.html,er[data]}中 data 是一个变量 3、变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是 取出某一范围中名称为 username 的变量。
因为我们并没有指定哪一个范围的 username,所以它会依序从 Pa ge、Request、Session、Application 范围查找。 假如途中找到 username,就直接回传,不再继续找下去,但是假 如全部的范围都没有找到时,就回传 null。 属性范围在 EL 中的名称 Page Request Session Application PageScope RequestScope SessionScope ApplicationScope
二、JSP EL 中的有效表达式 有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。 我们将分别了解这些有效表达式中的每一种: 1、文字 JSP 表达式语言定义可在表达式中使用的以下文字:
文字 Boolean true 和 false
文字的值
Integer
与 Java 类似。可以包含任何正数或负数,例如 24、-45、 567 与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
Floating Point
EL表达式教程
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构: ${https://www.360docs.net/doc/057751990.html,er.sex} 所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session 的范围中,取得 用户的性别。假若依照之前JSP Scriptlet的写法如下: User user = (User)session.getAttribute("user"); String sex = user.getSex( ); 两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。 一.与 [ ] 运算符 EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的: ${https://www.360docs.net/doc/057751990.html,er.sex}等于${https://www.360docs.net/doc/057751990.html,er["sex"]} . 和 [ ] 也可以同时混合使用,如下: ${sessionScope.shoppingCart[0].price} 回传结果为shoppingCart中第一项物品的价格。 不过,以下两种情况,两者会有差异: (1) 当要存取的属性名称中包含一些特殊字符,如. 或–等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name } 上述是不正确的方式,应当改为:${user["My-Name"] } (2) 我们来考虑下列情况: ${https://www.360docs.net/doc/057751990.html,er[data]} 此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${https://www.360docs.net/doc/057751990.html,er.sex}; 假若data 的值为"name"时,它就等于${https://www.360docs.net/doc/057751990.html,}。因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值。 二.EL 变量 EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。
EL表达式、语法及运算
EL表达式 一、EL表达式的概念 EL表达式是为了便于获取数据而定义的一种语言,JSP 2.0之后才成为一种标准。下面的示例是一个简单的EL表达式: <%@ page contentType="text/html; charset=UTF-8"%>
${stuno + 1}二、EL表达式的基本语法 EL表达式的出现让Web的显示层发生了大的变革,EL表达式用于获取数据,在JSP 2.0之后成为一种标准,是由JSP 标准标签库专家组和JSP 2.0 专家组开发。 EL表达式的语法格式:${标识符}(必须以“${”开始,以“}”结束“标示符”具体表达式的内容) 在JSP页面中使用的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为“”(注意,不是null)。 三、语法结构 1、JSP EL用于以下情形 静态文本 标准标签和自定义标签(可以作为元素的值,也可以在自定义或者标准动作元素的内容中使用) EL不能在脚本元素中使用 2、[]与.运算符
EL提供(.)和([])两种运算符来存取数据,即使用点运算符(.)和方括号运算符([])。 点运算符和方括号运算符可以实现某种程度的互换,如${https://www.360docs.net/doc/057751990.html,}等价于${student [“name”]}。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号时,就一定要使用[]。例如${https://www.360docs.net/doc/057751990.html, }应当改为${student[“name”] }。 如果要动态取值,就可以用[]来做,而.无法做到动态取值。例如${sessionScope.student[data]}中data 是一个变量。 3、变量 EL存取变量时间的方法很简单,例如${username}。它的意思是取出某一范围中名称为username 的变量。 属性范围在EL中的名称如表所示: 4、文字常量 一个EL表达式包含变量、文字常量、操作符。文字常量主要包括字符串、数字和布尔值、还有NULL,其中 字符串是由任何由单引号或双引号引起来的一串字符。 数字常量包括整型、浮点型,整型表示十进制、十六进制和八进制类型的值,浮点型与Java类似,可以包含任何正的或者负的浮点数。 布尔型包括true和false。 ${true} ${10} ${10.5f} ${“hello”} ${null} 5、操作符 EL表达式的操作符主要有
EL表达式常用标签
EL表达式和常用标签 1.el表达式的作用,什么时候使用el表达式 El表达式是为了简化jsp页面中的java代码,当在jsp页面中需要使用java代码的时候,可以使用el表达式来替换java代码 2.语法规则${ } 3.El表达式在request,session,application中的自动匹配范围最小的那一个 例如: request.setAttribute("name","mzl"); session.setAttribute("name","liu"); application.setAttribute("name","huyahui"); El: 获得attribute里面的值${name} 4.获取请求头的信息 获得全部请求信息${header }
获得cookie ${header.cookie }
获得cookie的第二种方式${header['cookie'] } 5.获取请求参数 6.获取作用于的数据 request.setAttribute("name","mzl"); session.setAttribute("name","liu"); application.setAttribute("name","huyahui"); El 获得request里面的值${https://www.360docs.net/doc/057751990.html,}
获得session里面的值${https://www.360docs.net/doc/057751990.html,}
获得application里面的值${https://www.360docs.net/doc/057751990.html,}
7.获取列表的数据 ArrayList list = new ArrayList(); list.add("zcxv"); list.add("adf"); list.add("asdf"); request.setAttribute("list",list); Map map = new HashMap(); map.put("01","adf"); map.put("02","zcv"); request.setAttribute("map",map); El 下标的方式进行访问集合${list[0]}
${list[1]}
${list[2]}
访问map里面的值:${map['01'] }
${map['02'] }
8.获取pojo对象的值 User user = new User(01,"123"); request.setAttribute("user",user); El 访问pojo里面的值
${user.id }
${https://www.360docs.net/doc/057751990.html, } 9.El表达式能够进行简单的计算 10.Jsp常用的标签库 动态循环输出数据到页面 User user = null; ArrayList list = new ArrayList(); for(int i=1;i<10;i++){ user = new User(i, "user" + i); list.add(user); } request.setAttribute("users",list);
EL表达式 (详解)
EL表达式 1 EL简介 1 语法结构 ${expression} 2 [] .运算符 EL 提供.和[]两种运算符来 取数据 当要 取的属性 称中包含一些特殊 符 如.或?等并非 母或数 的符号 就一定要使用[] 例如 ${user.My-Name}应当改 ${user["My-Name"] } 如果要动态取值时 就可 用[]来做 而.无法做到动态取值 例如 ${https://www.360docs.net/doc/057751990.html,er[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}表示返回请求参数的一组
值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话 范围内的变量.applicationScope表示应用范围的变量. 3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁 止.FALSE表示 禁 止.JSP2.0中默认的启用EL语言. 4-- EL语言可显示逻辑表达式如${true and false}结果是false 关系表达式如${5>6} 结 果是false 算术表达式如${5+5} 结果是10 5--EL中的变量搜索范围是:page request session application 点运算符(.)和"[ ]"都是 表示获取变量的值. 别是[ ]可 显示非词类的变量 2 EL隐含对象 1) 范围有关的隐含对象 范围有关的EL 隐含对象包含 四个 pageScope requestScope sessionScope 和 applicationScope 它们基本 就和JSP的pageContext request session和application一样 在EL中 这四个隐含对象只能用来取得范围属性值 getAttribute(String name) 能取得 他相关信息 例如 们要取得session中储 一个属性username的值 可 利用 列方法 session.getAttribute("username") 取得username的值 在EL中则使用 列方法 ${https://www.360docs.net/doc/057751990.html,ername} 2) 输入有关的隐含对象 输入有关的隐含对象有两个 param和paramValues 它们是EL中比较特别的隐含对象 例如 们要取得用户的请求参数时 可 利用 列方法 request.getParameter(String name) request.getParameterValues(String name) 在EL中则可 使用param和paramValues两者来取得数据 ${https://www.360docs.net/doc/057751990.html,} ${https://www.360docs.net/doc/057751990.html,}
EL表达式实验
Java web应用编程基础实验报告 实验7:EL表达式实验 一、实验目的 ●熟悉与初步掌握EL表达式的使用,并认识使用EL表达式可增强程序的可读性与可 维护性。 二、实验要求 ●掌握EL的基本语法、运算符及隐含对象相关知识,使用专业开发工具MyEclipse 编程。 ●上交实验报告电子文档(文档包含源程序,以班级、学号、姓名依次出现组成的 字符串标识文档,以班级为单位上交)。 三、实验内容 1、在客户端的表单中填写用户注册信息并提交后,应用EL表达式通过访问JavaBean的属性的方法将用户信息显示到页面上。 2、编写程序示例,实现投票功能并应用EL表达式显示投票结果。 四、实验过程中遇到的问题及解决手段 五、程序源代码 package com.bean; public class UserFrom { private String username; public String getUsername() { return username; } public void setUsername(String username) { https://www.360docs.net/doc/057751990.html,ername = username; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getSex() { return sex; } public void setSex(String sex) {
this.sex = sex; } public String[] getAffect() { return affect; } public void setAffect(String[] affect) { this.affect = affect; } private String pwd; private String sex; private String[] affect = null; } <%@page language="java"import="java.util.*"pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServer Port()+path+"/"; %>