EL表达式语法介绍

上传人:zou****hua 文档编号:189485621 上传时间:2023-02-22 格式:DOCX 页数:47 大小:54.67KB
返回 下载 相关 举报
EL表达式语法介绍_第1页
第1页 / 共47页
EL表达式语法介绍_第2页
第2页 / 共47页
EL表达式语法介绍_第3页
第3页 / 共47页
点击查看更多>>
资源描述
1.1 EL 表达式:EL 表达式规定为:valexpression 和 literalexpression,同时 E L 表达式支持 Compositeexpressions,很多 EL 表达式(evalex pressions 和 literalexpressions )被聚合在一起。EL 表达式被解析成数值表达式和方法表达式。其中,取值 表达式去引用一个值,而方法表达式则是关联一个方法。一 旦被解析之后,表达式能够被优化地计算一次或多次。下面我们来分为:evalexpression、literalexpression、Compo siteexpressions 来讲述1.1.1Eval-expressionEvalexpression是以使用$expr或者#expr结构的形式构成。两种方式都是相同的方式,能很好被解析和计算,尽管 它们在使用时有着不同的意义从技术方面来说。从J2EE层规范协定来说,$expr结构是直接计算而#expr 结构则是延期计算,这种界定符号指出了在 J2EE 层两种表 达式类型的语义上面的区别#expr这种界定符号被称为延 迟计算是因为直到系统需要的时候才计算。而$expr这种界 定符号则是在 JSP 页面编译的时候就计算,就是为什么叫做 直接计算的原因。1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算 成左值和右值。若在 EL 中有等号操作符号出现,右值是类 型出现在等号的右边的表达式,左值同理。右值比如:以下面这个例子为例:当表单被提交的时候,在申请计算的阶段,Faces计算EL表 达式 #checkOutFormBean.validateEmail作为一个数据接口 的引用,这个数据结构的数值是被一个表单相关联的输入参 数设置。因此,表达式的结果表现成一个数据结构的引用, 或者为一个左值。在翻译阶段,那个相同的表达式被计算,它产生特殊值关联 右值对象,作为 JSP 实例。一个左值合法语法是右值合法语法的子集。在特殊情况,一 个左值只能由单个变量(比如$name)或者一个从某个对象 中解析属性的组成,通过. 或 操作符(比如 $employee.n ame在解析取值表达式时,一个预期的类型是被提供的。拿右值 为例,预期的类型是表达式计算被强制的结果。以左值为例, 预期的类型是被忽略的,并且在属性被设置之前,提供的值 是被强制为一个表达式指向实际的属性类型。在后面提供了 类型转换1.1.1.2作为方法表达式的计算表达式在某种情况,计算表达式会描述成引用一个方法而不是模 型对象。比如,在JSF中,组建标记也提供了引用方法的属性的集合, 这些方法能够执行特定为组建标签关联的函数。为了支持这 些类型的表达式,EL定义了方法表达式(ELclass MethodE xpresssion)以上面的例子, validator 属性使用了关联方法表达式类型的表达式。做为一个取值表达式,表达式的计算(调用函数) 被延期并且在生命周期内的合理的瞬间能够被底层的技术 处理。方法表达共享相同的左值语法,它只能由单个变量(比如$n ame)或者一个从某个对象中解析属性的组成,通过.或 操作符(比如$employee.name)。关于预期返回值类型和 参数类型的信息提供在方法被解析的时候。方法表达式被计算在其引用的方法的调用时候或者获取引 用的方法信息。计算之上, ELAPI 验证方法必须一致于预期 方法的签名在解析时候。因此,没有方法表达式的强制1.1.2字面表达式一个字面表达式不使用$expr或者#expr结构并且简单 地计算 String 类型文本表达式。在 EL 上,一个预期某个类 型不止提供String。比如:表达式:Aloha!类型:String结果:Aloha!true Boolean Boolean.True为了生成字面值包括字符串$或者#,开发人员能够选 择使用组合表达式比如下面:$exprA#exprB,这里结果是 $exprA和#2乂卩也。两者选一个,使用转义字符 $和 #能够被用于转义,否则, 会被处理为取值表达式。$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 和 falseInteger - 参看 integerLiteralFloating point -参看 FloayPointLiteralString - 单引号和双引号 转义成 , 转义成 ,和 转义 成。引号只是需要需要转义在 string 封装值在相同的引号类 型。1.3. 错误,警告、默认值 表达式语言已经被设计出来作为 web 表示层应用程序。在使 用时,经验建议最重要的是能够提供尽可能好的表述来设计 甚至在页面中有的一点错误。为了达到这个需求,EL不提 供警告,只是提供默认值和错误。默认值都是类型正确的值, 这些值被子表达式赋值当有问题时候。一个错误是异常的抛 出(通过 EL 使用的环境来处理异常)。1.4.解析模型对象和他们的属性一个核心的概念在 EL 中,就是计算模型对象名称到一个对 象,并且在一个表达式中分离属性应用于对象(操作符. 和 )。EL API 提供一个一般化机制,解析器,通过底层技术实现 并且定义了规则,它管理模型对象名称的解析和他们关联属 性。1.5. 操作符和 .EL 遵照的 ECMAScript 来统一处理.和 操作符expr-a.identifier-b 等于 expr-aidentifier-b;验证器 identifier -b被用于构造一个字面的值作为一个验证器。计算 expr-aexpr-b:.计算expr-a的值放到value-a。 若 vaule-a 等于 null:如果expr-aexpr-b作为末尾的一个属性被解析:若表达式一个值表达式并且 ValueExpression.getValue(context)被调用,作为初始化表达式计算,返回 null。否则,抛出 PropertyNotFoundException 的异常.(尝试着去分 离引用 null作为左值)否则,返回 null计算exprb的值放到valueb. 若 value-b 等于 null;o如果expr-aexpr-b作为末尾的一个属性被解析:.若表达式是一个取值表达式并且ValueExpression.getVa lue(context)方法被调用去初始化表达式的计算,返回 null。.否则,抛出一个 PropertyNotFoundException.否则返回一个null若表达式是一个取值表达式:如果expraexprb作为末尾的一个属性被解析:.若 ValueExpression.getValue(context)方法被调用去初 始化表达式的计算,则调用 elResolver.getValue(conte xt.valuea,valueb) 方法。若 ValueExpression.getType(context)方法被调用,调用 elResolver.getType(context,valuea,valueb) 方法。若 ValueExpression.isReadOnly(context)方法被调用, 则调用 elResolver.isReadOnly(context,valuea,valueb) 方法。若 ValueExpression.setValue(context,val)被调用,则调用 elResolver.setValue(context,valuea,valueb,val) 方法。 否则,调用 elResolver.getValue(valuea,valueb) 。否则,表达式则是一个方法表达式:若 expr-aexpr-b 作为末尾的一个属性被解析:.强制value-b转化成String。.在解析时,寻找对象vaule-a上的value-b方法和提供预想的方法参数类型集合。如果不存在这些,或者返回的 类型不能匹配预想的回返类型(即方法签名不同),则 抛出一 MethodNotFoundException 。.若 MethodExpression.invoke(context,params)被调用,贝U通过传递过来参数来调用相应的方法。.若 MethidExpression.getMethodInfo(context)被调用,构 建和返回一个 MethodInfo 对象。否贝,调用 elResolver.getValue(value-a,value-b) 。1.6算术操作符号:算术操作只被在Integer(BigInteger和Long)类型和浮点(BigDecimal 和双精度型)值.有五个操作符: 加法:+减法:-乘法:*除法:/and div求余: %and mod算术操作符的计算在下面的章节中描述。A和B作为计算的 字表达式。1.6.1 二元操作符- A + ,-,* B.若A和B都是null,则返回(Long)0.若A或B属于BigDecimal类型,或者都是,那么:若操作符为+,返回 a.add(b)若操作符为-,返回 a.subtract(b)若操作符为*,返回 a.multiply(b)若 A 或B 属于Float, Double,或者包含String,e 或则 E,o若A或B属于Biginteger类型,把A和B强制转化成BigDecimal 类型并且应用操作符否则,A和B强制成Double类型并且申请操作符若 A或B 属于Biginteger类型,强制他们成为Biginteger 类型,然后:若操作符为+,返回 a.add(b)若操作符为-,返回 a.subtract(b)若操作符为*,返回 a.multiply(b)否侧,把A和B强制成Integer,并且应用符操作符。1.6.2 二元操作符- A /,div B若 A和B 都是null,则返回(Long)0若A 或B 一个属于BigDecimal或一个属于BigInteger,都强制成 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,或者包含String。e或则E,都强制成Double并且申请操作符。若 A或B 属于Biginteger类型,都强制成BigI nteger 返回 A.remainer(B)。否则强制成Long并且申请操作符。1.6.4 一元操作符 -A若A是null,则返回(Long)O若A属于BigDecimal类型或则Biginteger类型,或则 A.negate()。若A是 String 类型:。若A含有e或E,强制成Double类型并申请操作符否则强制成Long类型并申请操作符操作符产生异常,那么报错误。 若 A属于oubleByte, Short, integer, Long, Float, D保留原类型,并且申请操作符否则,报错误1.7 关系操作符 = 和 eq!= 和 ne 和 gt= 和 le= 和 ge 后面四种第二的版本符号提供使用是为了避免在 XML 语法 中中使用实体引用和含有相同的行为,比如行为 与 lt 一样 以此类推。1.7.1 A = , lt , gt , le , ge Bo若A = B , 若 = 或者ge返回 true。o若alseA 或 B 是 null,returnf若 A 或 B 属于 BigDecemi al类型,他们都会强制转化成BigDecemial类型,并且使 用A.compareTo(B)方法的返回值作为返回值。若A 或 B属于 Float 或Double 都强制成为 Double 类型并且申请操作符若A 或 B属于BigInteger都强制成Biginteger类型并且使用A.compareTo(B)方法的 返回值作为返回值。若A 或 B属于Byte, Short, Character, Integer,或者Long等类型都强制成为Lo ng 类型并且申请操作符。A 或 B属于字符型强制成 String类型,比较字符:若 A 属于 Comparable 类型,那么:若A.compareTo(B)抛出异常,错误。否则利用A.compareTo(B)结果若 B 属于 Comparable 类型,那么:若B.compareTo(A)抛出异常,错误。否则利用B.compareTo(A)结果否则,报错误1.7.2 A = ,!=, eq , ne B若A = B,申请操作若A 或 B属于 BigDecemial 类型他们都会强制转化成 BigDecemial 类型,然后: 若操作符为= 或者 eq返回 A.equals(B)若操作符为!=或者eq返回 !A.equals(B)若A 或 B属于 Float 或Double 都强制成为 Double 类型并且申请操作符若A 或 B成 BigInteger 类型,然后 若操作符为返回 A.equals(B) 若操作符为返回 !A.equals(B)属于Biginteger,都强制= 或者 eq!= 或者 eq若A 或 B属于Byte, Short, Character, Integer,或者Long等类型都强制成为Lo ng 类型并且申请操作符。若 A 或 BBoolean,并且申请符号。属于Boolean,都强制成属于enum,都强制成enum,并且申请符号。若A 或 B类型,比较字符:属于字符型强制成 String.否则,如果当调用A.equals(B)产生错误,则报错误。.否则,申请符号,并且使用A.equals(B)的结果1.8.逻辑操作符逻辑操作符有:& 和 and| 和 or! 和 not 计算逻辑操作符的说明在下面章节中: 1.8.1 二元操作符- A & , |,and,or BA和B强制成Boolean,申请符号操作符停止计算,能够由表达式来决定,比如:Aand B andC and C如果B等于false,然后只有A和B计算。1.8.2 一元操作符 ! ,not A:A强制成Boolean,申请操作符1.9空值操作符-empty A空值操作符是一种前缀操作符,他被使用决定于一个值是否 空或者 null。计算空值 A:.若A等于 null, 返回true.否则如果A 是空String,返回true.否则如果A 是空array,返回true.否则如果A是空Map,返回true.否则如果A 是空 Collection,返回true.否则返回false1.10.条件操作符 A ? B: C计算B或C,结果依赖于A的计算 强制成 Boolean:若 A 等于 true ,计算结果为 B若 A 等于 false ,计算结果为 C1.11.括号操作符括号操作符能够改变计算的优先级,比如:$a*(b+c)(先 计算 b+c)1.12.操作符优先级 .()- not ! empty (一元操作符)* / div % mod+ - (二元操作符) = lt gtle ge= != eq ne& andor带有参数合理的函数拥有的优先级超过符号的优先级。因此, 表达式$c?b:f(),是一个非法的,因为b:f()被解析成一个合理 的函数而不是作为一个条件表达式。通常, ()操作符能被用作确定优先级,比如: $c? b :(f() 1.13.保留字: 下列的语言保留字不能由做法标识符:and eq gt true instanceofornelefalseemptynot ltgenulldivmod注:这些中的很多保留字没有用到语言中,但是他们可能会 在未来中使用,所以开发人员必须避免使用这些(保留)字 1.14.函数:EL 有些限定的函数,重用 XML 命名空间(和属性)限定, XSL函数,和JSP自定义动作等概念。函数都映射到public static 方法在 Java 类中。限定 n 个数组函数完全语法:ns:f(a1,a2,.,an)ns是命名空间的前缀,f是函数的名字,a是函数的参数。EL 函数被映射,解析和绑定在解析的时候。它是由 Functio nMapper类负责提供映射命名空间限定函数,这个函数使用 有特殊的类的 static 方法在表达式创造。若没有 FunctionMa pper类被提供,函数会失效。1.15.变量:就像 FunctionMapper 为 EL 表达式中添加函数那样提供一种 灵活的机制,VariableMapper为支持EL变量的概念提供一 种灵活的机制。一个EL变量不是直接引用一个模型变量而 能够通过ELResolver类被解析出来之后引用,而不是EL变 量引用一个EL表达式。EL表达式的计算产生关联一个EL 表达式数值。EL变量被映射,解析和绑定在解析的时候。它是由Variabl eMapper类负责提供EL变量映射到ValueExpressions当表达 式创建时。若没有 VariableMapper 类被提供,函数会失效。 参看 javax.el 包中的描述更多细节。1.16.枚举:统一 EL支持JavaSE5中的枚举类型。强制规则包括处理枚 举类型在下面的章节中。同时,引用在EL表达式中枚举类 型实例化对象的值,通过下面的强制转化规则使用字面值字 符串去强制执行。比如,我们说,我们有一个枚举类型叫做Suit,它有成员 Heart,Diamond,Club,和 Spade。并且,我们说, 我们有一个引用在EL表达式中,mySuit,就是Spade。如果 你想要去测试枚举Spade相等性,你能说$mySuit= Enum. valueOf(Suit.class,Spade)。1.17.类型转换:每个表达式被计算在预料类型的上下文中。表达式计算结果 可能不会精确地匹配预料的类型,所以应用规则描述在下面 章节。1171强制X值转化成类型Y:若X是原始(原生)类型,那么让X等于X的包装类型。否则,让X不变。若Y是原始(原生)类型,那么让Y等于Y的包装类型。否则,让 Y 不变。 应用下面的章节中强制转化 X 成 Y。 若 Y 是原始(原生)类型,那么结果被拆包强制结果找到 若强制结果是null,那么报错。 若 Y 不是原始(原生)类型,结果就是强制结果。比如;如果强制 int 类型成 String 类型,那么包装 int 类型成 I nteger类型并且利用这个规则强制Integer类型成String类型。 或者如果强制String成一个Double,应用规则强制String类 型成 Double 类型,确定结果 Double 不是 null。1.7.2 强制 A 成 String 类型o 如果 A 是 String 类型,则返回 A否则,若A等于null,则返回否则,若 A 是枚举类型,则返回 A.name()否则,若A.toString()抛出throws 一个异常,错误否则,返回 A.toString()1.7.3 强制 A 成 Number 类型 N.若A等于null或,返回0.若A属于Character类型,转化A成newShort(short)a.charValue(),并且应用以下规则。.若A属于Boolean类型,则报错.若A属于Numner类型,则直接返回A.若A属于Numner类型,安静地强制成Number类型利 用下面的算法:.若N属于Biginteger类型,.若 A 是一个 BigDecimal,则返回 A.toBiginteger().否则,返回 BigInteger.valueOf(A.longValue().若N属于BigDecimal类型,.若A属于BigDecimal类型,返回newBigDecimal (A).否贝【J,返回newBigDecimal(A.doubleValue()若 N 属于 Byte 类型,返回 newByte(A.byteValue()若 N 属于 Short 类型,返回 newShort(A.shortValue()若 N 属于 Integer 类型,返回 newInteger(A.intValue()若 N 属于 Long 类型,返回 newLong(A.longValue()若N属于Float类型,返回newFloat(A.floatValue()若 N 属于 Double 类型,返回 newe(A.doubleValue()否则,错误。若 A 属于 String 类型,那么:如果N属于BigDecimal,那么:一个异常,则报错误。Doubl如果 newBigDecimal(A)抛出否则,返回 newBigDecimal(A)。若N属于Biginteger,那么:.如果 newBigInteger(A)抛出一个异常,则报错误。 否则,返回 newBigInteger(A)。若N.valueOf(A)抛出一个异常,则报错误。 否则,返回 N.valueOf(A)。 否则,报错误。1.7.4 强制 A 成 Character若 A 等于 null或则,返回(char)O若 A 属于 Character,返回 A若 A 属于 Boolean 类型,则报错若A属书Number类型,安静地强制转化成Short,然后返回一个Character,它的数值等于对应的Short。若 A 是字符型,返回 A.charAt(0)否则,报错误1.7.5 强制成 Boolean若A等于null 或,返回 false.否则,若A属于Boolean,返回A 否则,若 A 是一个 String 类型,并且 Boolean.valueOf(A) 不抛出异常,并且返回它。 否则,报错误。176强制A成一个枚举型T若A等于null,返回null若A被分配成T,则安静地强制转化若 A 等于,返回 null若 A 是一个字符串调用 Enum.valueOf(T.getClass(),A) 方法 并且返回这个结果1.7.7强制成任何其他类型 T若A等于null,则返回null若A分配成T,则安静地强制转化。若 A 为一个字符串,并且 T 没有含有 PropertyEditor :.若A等于,返回null.否则,报错误。若 A 为一个字符串并且 T 的 PropertyEditor 抛出一个异常:.若A等于,返回null否则,应用 T 的 PropertyEditor否则,错误。EL 语法EL 的语法很简单,他最大的特点就是使用上很方便 例:$sessionScope.user.sex所有 EL 都是以 $ 为起始、以 为结尾的。上述 EL 范例的意思是:从 Session 取得用户的性别。如果 使用之前 JSP 代码的写法如下:两者相比较之下,可以发现 EL 的语法比传统 JSP 代码更为 方便、简洁。EL 提供 . 和 两种运算符来存取数据, 可以访问集合或者是数组的元素、Bean的属性。下列两者所代表的意思是一样的,但是需要保证要取得对象的那个的属性有相应的setXxx()和getXxx()方法才行。例:$sessionScope.user.sex等于$sessionScope.usersex. 和 也可以同时混合使用,如下: $sessionScope.shoppingCart0.price 返回结果为 shoppingCart 中第一项物品的价格。在EL中,字符串既可以使用abc,可以使用abc。EL 运算符EL 的算术运算符和 Java 中的运算符的大致相同,优先级也 相同。注意:+ 运算符不会连接字符串了,他只用于加法运算。 EL 关系运算符有以下六个运算符关系运算符说明范例结果= = 或 eq |等于|$ 5 = = 5 或 $ 5 eq 5 | true!= 或 ne不等于 |$ 5 != 5 或 $ 5 ne 5 |false 或 lt小于|$3 或 gt大于|$35或 $3gt5false= 或 le小于等于$ 3 = 或 ge大于等于$ 3 = 5 或 $ 3 ge 5 falseempty 运算符Empty 运算符主要用来判断值是否为 null 或空的,例如$ empty param.name 接下来说明 Empty 运算符的规则:empty A如果 A 为 null 时,返回 true如果 A 不存在时,返回 true如果A为空字符串时,返回true如果 A 为空数组时,返回 true如果 A 为空的 Map 时,返回 true如果A为空的Collection时,返回true否则,返回 false 注意:在使用 EL 关系运算符时,不能够写成:$param.password1 = = $param.password2 或者$ $param.password1 = = $ param.password2 而应写成$ param.password1 = = param.password2 使用 EL 从表单中取得数据与输入有关的隐含对象有两个:param和paramValues,它 们是 EL 中比较特别的隐含对象。一般而言,我们在取得用 户的请求参数时,可以利用下列方法: request.getParameter(String name) request.getParameterValues(String name)在 EL 中则可以使用 param 和 paramValues 两者来取得数据。 $param.name$paramValues.name可以取得所有同名参数的值$paramValues.hobbies0 可以通过指定下标来访问特定 的参数的值这里 param 的功能和 request.getParameter(String name) 相同,而 paramValues 和request.getParameterValues(String name)相同。如果用 户填了一个 form, form 名称有为 username 的文本框,则我 们就可以使用$param.username来取得用户填入文本框的 值。EL 函数EL 中使用函数要写一个要使用到方法的类,然后在配置XXXtld文件,然后在JSP中使用时和JSP的自定义标签相似。XXX.tld 中的配置reversejsp2.eXamples.el.Functionsjava.lang.Stringreverse( java.lang.String )使用 EL 函数的写法$sn:upper(abc)注意:在定义EL函数时,都必须为公开静态(public static)EL 的隐含对象EL 也可以使用内置对象中设置的属性,需要使用特定的 EL 内置对象属性范围 | 在 EL 中的对象Page|pageScopeRequest|requestScopeSession|sessionScopeApplication |applicationScopeEL 中使用内置对象的属性$requestScope.user等价于 如果不写出特定的范围 ,那就会在不同的范围间进行搜索 了例:user (user 是在 request 范围 request.setAttribute(user,user) 也就等于$requestScope.userEL 的隐含对象对象类型说明PageContextjavax.servlet.ServletContext |表示此 JSP 的 PageContextPageScopejava.util.Map|RequestScopejava.util.Map |取得 Request 范围的属性名称所对应的值sessionScopejava.util.Map |取得 Session 范围的属性名称所对应的值applicationScopejava.util.Map |取得 Application 范围的属称所对应的值param如同java.util.MapServletRequest.getParameter(String|name) 返回String 类型的值paramValuesjava.util.Map如同ServletRequest.getParameterValues|(Stringname)。返回 St ring 类型的值headerjava.util.Map如同 ServletRequest.getHeader(Stringname) | 返回 String 类型的值headerValuesjava.util.Map|如同 ServletRequest.getHeaders(Stringname) |。返回 String 类型的值cookiejava.util.Map如同 HttpServletRequest.getCookies( )initParamjava.util.Map如同ServletContext.getInitParameter(String|name) 。返回String 类型的值 cookie 对象所谓的 cookie 是一个小小的文本文件,它是以 key、value 的方式将 Session Tracking 的内容记录在这个文本文件内, 这个文本文件通常存在于浏览器的暂存区内。JSTL并没有 提供设定cookie的动作,因为这个动作通常都是后端开发 者必须去做的事情,而不是交给前端的开发者。如果我们在 cookie 中设定一个名称为 userCountry 的值,那么可以使 用$cookie.userCountry来取得它。header和headerValues (请求报头对象)header 储存用户浏览器和服务端用来沟通的数据,当用户 要求服务端的网页时,会送出一个记载要求信息的标头文 件,例如:用户浏览器的版本、用户计算机所设定的区域等 其他相关数据。如果要取得用户浏览器的版本,即 $headerUser-Agent 。另外在很少机会下,有可能同 一标头名称拥有不同的值,此时必须改为使用 headerValues 来取得这些值。注意:因为User-Agent中包含“-”这个特殊字符,所以必 须使用“”,而不能写成$header.User-Agent。 initParam就像其他属性一样,我们可以自行设定 web 应用的环境参数 (Con t ext ) ,当我们想取得这些参数时,可以使用 initParam 隐含对象去取得它,例如:当我们在 web.xml 中设定如下: param-nameuserid/param-nameparam-valuemike/param-value/web-app那么我们就可以直接使用$initParam.userid来取得名 称为userid,其值为mike的参数。下面是之前的做法: String userid =(String)application.getInitParameter(userid); pageContext 对象我们可以使用$pageContext来取得其他有关用户要求或 页面的详细信息。下面列出了几个比较常用的部分。Expression$pageContext.request象$pageContext.session session 对象 $pageContext.request.queryString 参数字符串说明取得请求对 取得 取得请求的 取得请求的 服务的 web 取得 HTTP 取得使用的 取得用户名 取得用户的$pageContext.request.requestURL URL,但不包括请求之参数字符串 $pageContext.request.contextPath application 的名称 $pageContext.request.method 的方法(GET、POST) $pageContext.request.protocol 协议(HTTP/1.1、HTTP/1.0) $pageContext.request.remoteUser 称IP 地址$pageContext.session.new | 判断session是否为新的,所谓新的session,表示刚由server产生而 client 尚未使用$pageContext.session.id|取得session 的 ID$pageContext.servletContext.serverlnfo| 取得主机端的服务信息JSTL(JSP 标准标签库)JSTL 由核心标签, , xml 解析标签 ,国 际化标签fmt:,数据库访问标签sql:,函数标 签fn:.核心标签Core 属性设置c:set 设置属性c:remove 移除设置的属性过程控制 条件标签只有在 test 属性的值为 true 是才会执行标签体例:hellochoose 和 when 是组合在一起使用的,有点类似 于 swith case 的语法 。c:when test二.when也是条件判断标签,test属性的 值为 true 是才会执行标签体。例:c:choosec:when test=$param.age18h1you is a childh1/c:whenc:when test=$param.age18 and param.age50 h1you is a young person/h1/c:whenc:when test=$param.age50h1you is a old person/h1/c:whenc:forEach 迭代标签 例:c:forEach var=book item=$store.books varStatus=statush1$book.parice/h1/c:forEachc:forEach begin=1 end=5 step=1h1hello/h1/c:forEachc:forTokens字符串迭代标签引入标签url 标签c:url value=.c:param name=. value=./c:urlc:url value=.使用 url 标签可以实现 URL 回写c:redirect uri=xxx/xxx/xxx.xx/国际化标签资源指定标签fm t: message消息标签例:namexxxx.propertiesname=00600700
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 机械电气


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!