JSP20技术手册 表6-1 属性范围 在EL中的名称 Page Scop Requestscope Session Session Scope Application ApplicationScope 自动搜索顺序 我们也可以指定要取出哪一个范围的变量(见表6-2) 表6-2 sipage Scope username 取出Page范围的 username变量 s frequestScope username 取出 Request范围的 username变量 Isession Scope. username 陬出 Session范围的 username变量 s{ applicationScope, username}取出 Application范围的 username变量 其中, page Scope、 request Scope、 session Scope和 application Scope都是EL的隐含对象,由 它们的名称可以很容易猜出它们所代表的意思,例如:${ session Scope. username}是取出 Session 范围的 username变量。这种写法是不是比之前JSP的写法: String username =(String) session. getAttribute( username") 容易、简洁许多。有关EL隐含对象在6-3节中有更详细的介绍。 6-2-3自动转变类型 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看 下面这个范例 Separa. count 20 假若窗体传来 coun t的值为10时,那么上面的结果为30。之前没接触过JSP的读者可能会认为 上面的例子是理所当然的,但是在JSP1.2之中不能这样做,原因是从窗体所传来的值,它们的类 型一律是 String,所以当你接收之后,必须再将它转为其他类型,如:int、 float等等,然后才能 执行一些数学运算,下面是之前的做法 String str count request getParameter("count") Java爱好者htp/ w.javafan. net制作
JSP2.0 技术手册 Java 爱好者 http://www.javafan.net 制作 表 6-1 属性范围 在 EL 中的名称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope 自动搜索顺序 我们也可以指定要取出哪一个范围的变量(见表 6-2): 表 6-2 范 例 说 明 ${pageScope.username} 取出 Page 范围的 username 变量 ${requestScope.username} 取出 Request 范围的 username 变量 ${sessionScope.username} 取出 Session 范围的 username 变量 ${applicationScope.username} 取出 Application 范围的 username 变量 其中,pageScope、requestScope、sessionScope 和 applicationScope 都是 EL 的隐含对象,由 它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出 Session 范围的 username 变量。这种写法是不是比之前 JSP 的写法: String username = (String) session.getAttribute("username"); 容易、简洁许多。有关 EL 隐含对象在 6-3 节中有更详细的介绍。 6-2-3 自动转变类型 EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看 下面这个范例: ${param.count + 20} 假若窗体传来 count 的值为 10 时,那么上面的结果为 30。之前没接触过 JSP 的读者可能会认为 上面的例子是理所当然的,但是在 JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类 型一律是 String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能 执行一些数学运算,下面是之前的做法: String str_count = request.getParameter("count");
JSP20技术手册 int count Integer parseInt (str count) count count 20 接下来再详细说明EL类型转换的规则 (1)将A转为 String类型 ●假若A为 String时:回传A ●否则,当A为null时:回传" ●否则,当A. tostring()产生异常时:错误! ●否则,回传A. toString() (2)将A转为 Number类型的N ●假若A为null或"”时:回传0 ●假若A为 Character时:将A转为 new Short(( short)a. charvalue()) ●假若A为 Boolean时:错误! ●假若A为№ umber类型和N一样时:回传A ●假若A为№ umber时 假若N是 BigInteger时 假若A为 BigDecima1时:回传A. toBiglnteger() 否则,回传 BigInteger. valueof(A. longvalue()) 假若N是 BigDecimal时: 假若A为 Biglnteger时:回传A. toBigDecimal() 否则,回传 BigDecimal. valueof(A. doublevalue()) ·假若N为Byte时:回传 new Byte(A. bytevalue()) 假若N为 Short时:回传 new Short(A. shortvalue()) 假若N为 Integer时:回传 new Integer(A. intvalue()) Java爱好者htp/ w.javafan. net制作
JSP2.0 技术手册 Java 爱好者 http://www.javafan.net 制作 int count = Integer.parseInt(str_count); count = count + 20; 接下来再详细说明 EL 类型转换的规则: (1) 将 A 转为 String 类型 ● 假若 A 为 String 时:回传 A ● 否则,当 A 为 null 时:回传 "" ● 否则,当 A.toString( )产生异常时:错误! ● 否则,回传 A.toString( ) (2) 将 A 转为 Number 类型的 N ● 假若 A 为 null 或 "" 时:回传 0 ● 假若 A 为 Character 时:将 A 转为 new Short((short)a.charValue( )) ● 假若 A 为 Boolean 时:错误! ● 假若 A 为 Number 类型和 N 一样时:回传 A ● 假若 A 为 Number 时: ·假若 N 是 BigInteger 时: ·假若 A 为 BigDecimal 时:回传 A.toBigInteger( ) ·否则,回传 BigInteger.valueOf(A.longValue( )) ·假若 N 是 BigDecimal 时: ·假若 A 为 BigInteger 时:回传 A.toBigDecimal( ) ·否则,回传 BigDecimal.valueOf(A.doubleValue( )) ·假若 N 为 Byte 时:回传 new Byte(A.byteValue( )) ·假若 N 为 Short 时:回传 new Short(A.shortValue( )) ·假若 N 为 Integer 时:回传 new Integer(A.intValue( ))
JsP20技术手册 假若N为Long时:回传 new Long(A. longvalue() 假若N为 Float时:回传 new Float(A. floatvalue()) 假若N为 Double时:回传 new Double(A. doublevalue()) 否则,错误! ●假若A为 String时: 假若N是 BigDecimal时 假若 new BigDecimal(A产生异常时:错误! 否则,回传 new BigDecimal(A 假若N是 BigInteger时 ·假若 new BigInteger(A)产生异常时:错误! ·否则,回传 new BigInteger(A) 假若N. valueof(A)产生异常时:错误! ·否则,回传N. valueof(A) 否则,错误 (3)将A转为 Character类型 ●假若A为null或""时:回传(char)0 ●假若A为 Character时:回传A ●假若A为 Boolean时:错误! ●假若A为 Number时:转换为 Short后,然后回传 Character ●假若A为 String时:回传A. charAt(0) ●否则,错误! (4)将A转为 Boolean类型 Java爱好者htp/ w.javafan. net制作
JSP2.0 技术手册 Java 爱好者 http://www.javafan.net 制作 ·假若 N 为 Long 时:回传 new Long(A.longValue( )) ·假若 N 为 Float 时:回传 new Float(A.floatValue( )) ·假若 N 为 Double 时:回传 new Double(A.doubleValue( )) ·否则,错误! ● 假若 A 为 String 时: ·假若 N 是 BigDecimal 时: ·假若 new BigDecimal(A)产生异常时:错误! ·否则,回传 new BigDecimal(A) ·假若 N 是 BigInteger 时: ·假若 new BigInteger(A)产生异常时:错误! ·否则,回传 new BigInteger(A) ·假若 N.valueOf(A)产生异常时:错误! ·否则,回传 N.valueOf(A) ● 否则,错误! (3) 将 A 转为 Character 类型 ● 假若 A 为 null 或 "" 时:回传 (char)0 ● 假若 A 为 Character 时:回传 A ● 假若 A 为 Boolean 时:错误! ● 假若 A 为 Number 时:转换为 Short 后,然后回传 Character ● 假若 A 为 String 时:回传 A.charAt(0) ● 否则,错误! (4) 将 A 转为 Boolean 类型
JsP20技术手册 ●假若A为null或""时:回传 false ●否则,假若A为 Boolean时:回传A ●否则,假若A为 String,且 Boolean. valueof(A)没有产生异常时:回传 Boolean. valueof(A) ●否则,错误! 6-2-4EL保留字 EL的保留字如表6-3: 表6-3 gt le false instanceof mpty d Imod 所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误 6-3EL隐含对象 笔者在“第五章:隐含对象( Implicitω bject)”中,曾经介绍过9个JSP隐含对象,而E本 身也有自己的隐含对象。EL隐含对象总共有11个(见表6-4): 表6-4 隐含对象 Page Context javax. servlet. ServletContext表示此JSP的 PageContext java util. Map 取得Page范围的属性名称所对应的值 RequestScope java util. Map 陬取得 Request范围的属性名称所对应 的值 session Scope java util. Map 取得 Session范围的属性名称所对应 的值 lapplication Scopeljava util Map 取得 Application范围的属性名称所 对应的值 如同 Jjavautil.Map ServletRequest.get quest tParameter (string ame)。回传 String类型的值 tring 续表 隐含对象 paramValues java util. Map 如同 Java爱好者htp/ w.javafan. net制作
JSP2.0 技术手册 Java 爱好者 http://www.javafan.net 制作 ● 假若 A 为 null 或 "" 时:回传 false ● 否则,假若 A 为 Boolean 时:回传 A ● 否则,假若 A 为 String,且 Boolean.valueOf(A)没有产生异常时:回传 Boolean.valueOf(A) ● 否则,错误! 6-2-4 EL 保留字 EL 的保留字如表 6-3: 表 6-3 And eq gt true Or ne le false No lt ge null instanceof empty div mod 所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。 6-3 EL 隐含对象 笔者在“第五章:隐含对象(Implicit Object)”中,曾经介绍过 9 个 JSP 隐含对象,而 EL 本 身也有自己的隐含对象。EL 隐含对象总共有 11 个(见表 6-4): 表 6-4 隐含对象 类 型 说 明 PageContext javax.servlet.ServletContext 表示此 JSP 的 PageContext PageScope java.util.Map 取得 Page范围的属性名称所对应的值 RequestScope java.util.Map 取得 Request 范围的属性名称所对应 的值 sessionScope java.util.Map 取得 Session 范围的属性名称所对应 的值 applicationScope java.util.Map 取得 Application 范围的属性名称所 对应的值 param java.util.Map 如同 ServletRequest.getParameter(String name)。回传 String 类型的值 续表 隐含对象 类 型 说 明 paramValues java.util.Map 如同
JSP20技术手册 隐含对象 ServletRequest. ge tParameterValues(String name)。回传 String口类型的值 header Java util. Map 如同 ServletRequest. getHeader( String ame)。回传 String类型的值 如同 Servletrequest. getHeaders( String headervalues java util. Map )。回传 String[类型的值 cookie Java. ut 如同 HttpservletrequEst. getCookies() 如同 initParam javautil. Map ServletContext getInitParameter(String name)。回传 String类型的值 这11个隐含对象( Implicit Object),笔者将它分成三类: 1.与范围有关的隐含对象 applicationScope requestScope 2.与输入有关的隐含对象 paran paramvalues 3.其他隐含对象 cookie header headervalues initParam 接下来笔者会依照上面的分类顺序,为读者介绍这些隐含对象。 6-3-1属性( Attribute)与范圉( Scope Java爱好者htp/ w.javafan. net制作
JSP2.0 技术手册 Java 爱好者 http://www.javafan.net 制作 隐含对象 类 型 说 明 ServletRequest.getParameterValues(String name)。回传 String []类型的值 header java.util.Map 如同 ServletRequest.getHeader(String name)。回传 String 类型的值 headerValues java.util.Map 如同 ServletRequest.getHeaders(String name)。回传 String []类型的值 cookie java.util.Map 如同 HttpServletRequest.getCookies( ) initParam java.util.Map 如同 ServletContext.getInitParameter(String name)。回传 String 类型的值 这 11 个隐含对象(Implicit Object),笔者将它分成三类: 1. 与范围有关的隐含对象 applicationScope sessionScope requestScope pageScope 2. 与输入有关的隐含对象 param paramValues 3. 其他隐含对象 cookie header headerValues initParam pageContext 接下来笔者会依照上面的分类顺序,为读者介绍这些隐含对象。 6-3-1 属性(Attribute)与范围(Scope)