EL表达式与JSTL标签库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

简化对Java代码的访问JSP2.0表达式语言第十一节EL简介•EL全名为ExpressionLanguage,它原本是JSTL1.0为方便存取数据所自定义的语言。当时EL只能在JSTL标签中使用,如下:c:outvalue=${3+7}•到了JSP2.0之后,EL已经正式纳入成为标准规范之一。因此,只要是支持Servlet2.4/JSP2.0的Container,就都可以在JSP网页中直接使用EL了。EL语法•EL语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:–${sessionScope.user.sex}•所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得用户的性别。假若依照之前JSPScriptlet的写法如下:–Useruser=(User)session.getAttribute(user);–Stringsex=user.getSex();.与[]运算符•EL提供.和[]两种运算符来存取数据。下列两者所代表的意思是一样的:–${sessionScope.user.sex}•等于–${sessionScope.user[sex]}•.和[]也可以同时混合使用,如下:–${sessionScope.shoppingCart[0].price}两者会有差异•(1)当要存取的属性名称中包含一些特殊字符,如.或–等并非字母或数字的符号,就一定要使用[],例如:–${user.My-Name}–上述是不正确的方式,应当改为:–${user[My-Name]}•(2)我们来考虑下列情况:–${sessionScope.user[data]}–此时,data是一个变量,假若data的值为sex时,那上述的例子等于${sessionScope.user.sex};–假若data的值为name时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但.无法做到动态取值。${expr-a[expr-b]}•(1)当expr-a的值为null时,它会回传null。•(2)当expr-b的值为null时,它会回传null。•(3)当expr-a的值为Map类型时:–假若!value-a.containsKey(value-b)为真,则回传null。–否则回传value-a.get(value-b)。•(4)当expr-a的值为List或Array类型时:–将value-b的值强制转型为int,假若不能转型为int时,会产生error。–然后,假若value-a.get(value-b)或Array.get(value-a,value-b)产生ArrayIndexOutOfBoundsException或IndexOutOfBoundsException时,则回传null。–假若value-a.get(value-b)或Array.get(value-a,value-b)产生其他的异常时,则会产生error。–最后都没有任何异常产生时,回传value-a.get(value-b)或Array.get(value-a,value-b)。•(5)当expr-a的值为JavaBean对象时:–将value-b的值强制转型为String。–假若getter产生异常时,则会产生error。若没有异常产生时,则回传getter的结果。EL变量•EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。•因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就返回null.取出哪一个范围的变量范例说明${pageScope.username}取出Page范围的username变量${requestScope.username}取出Request范围的username变量${sessionScope.username}取出Session范围的username变量$(applicationScope.username)取出Application范围的username变量自动转换类型•EL除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转换类型,我们来看下面这个范例:–${param.count+20}•假若窗体传来count的值为10时,那么上面的结果为30,依照之前JSPScriptlet的写法如下:–Stringstr_count=request.getParameter(count);–intcount=Integer.parseInt(str_count);–count=count+20;EL保留字AndeqgttrueOrnelefalseNoltgenullinstanceofemptydivmodEL隐含对象•pageScope–范围和JSP的Page相同,也就是单单一页JSPPage的范围(Scope)。•requestScope–范围和JSP的Request相同,requestScope的范围是指从一个JSP网页请求到另一个JSP网页请求之间,随后此属性就会失效。•sessionScope–范围和JSPScope中的session相同,它的属性范围就是用户持续在服务器连接的时间。•applicationScope–范围和JSPScope中的application相同,它的属性范围是从服务器一开始执行服务,到服务器关闭为止。与输入有关的隐含对象•与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。一般而言,我们在取得用户的请求参数时,可以利用下列方法:–request.getParameter(Stringname)–request.getParameterValues(Stringname)•在EL中则可以使用param和paramValues两者来取得数据。–${param.name}–${paramValues.name}隐含对象•cookie–所谓的cookie是一个小小的文本文件,它是以key、value的方式将SessionTracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在cookie中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。•header和headerValues–header储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header[User-Agent]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues来取得这些值。隐含对象•initParam–就像其他属性一样,我们可以自行设定web站台的环境参数(Context),当我们想取得这些参数时,可以使用initParam隐含对象去取得它,•pageContext–我们可以使用${pageContext}来取得其他有关用户要求或页面的详细信息。隐含对象EL算术运算符Tomcat上的jsp-examples中,有一个EL算术运算符的范例basic-arithmetic.jsp,我们可以测试一下这个文件。EL关系运算符•在使用EL关系运算符时,不能够写成:–${param.password1}==${param.password2}–${${param.password1}==${param.password2}}•而应写成–${param.password1==param.password2}Tomcat上的jsp-examples中,有一个EL算术运算符的范例basic-comparisons.jsp,我们可以测试一下这个文件。EL逻辑运算符EL其他运算符•EL除了上述三大类的运算符之外,还有下列几个重要的运算符:–(1)Empty运算符•${emptyparam.name}–(2)条件运算符•${A?B:C}–(3)()括号运算符•:${A*(B+C)}JSTL课程目标JSTL概述下载安装JSTLCore标记库Format标记库XML标记库SQL标记库Functions标记库JSTL概述JSTL(JavaServerPagesStandardTagLibrary,JSP标准标签库)Web程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。包括5个标记库最新的版本:JSTL1.2JavaEE5的标准技术5个标记库•JSTL所提供的标签函数库主要分为五大类:–核心标签库(Coretaglibrary)–I18N格式标签库(I18N-capableformattingtaglibrary)–SQL标签库(SQLtaglibrary)–XML标签库(XMLtaglibrary)–函数标签库(Functionstaglibrary)JSTL1.1VS.JSTL1.0•JSTL1.0更新至JSTL1.1时,有以下几点不同:–EL原本是定义在JSTL1.0的,现在EL已经正式纳入JSP2.0标准规范中,所以在JSTL1.1规范中,已经没有EL的部分,但是JSTL依旧能使用EL。–JSTL1.0中,又分EL和RT两种函数库,到了JSTL1.1之后,已经不再分这两种了。以下说明EL和RT的差别:•EL完全使用ExpressionLanguage,简单,建议使用•RT使用Scriptlet,Java语法,供不想转换且习惯旧表示法的开发者使用–JSTL1.1新增函数(functions)标签库,主要提供一些好用的字符串处理函数JSTL概述例子程序%@taglibprefix=“c”uri=“”%htmlheadtitleJSTLfirstexample/title/headbody用户名:c:outvalue=“${username}”//body/html下载安装JSTL标记库c:out标记c:out主要用来显示数据的内容,就像是%=scripting-language%一样,例如:Hello!c:outvalue=${username}/语法1:c:outvalue=value[escapeXml={true|false}][default=defaultValue]/语法2:c:outvalue=value[escapeXml={true|false}]defaultvalue/c:out范例•c:outvalue=HelloJSP2.0!!/•c:outvalue=${3+5}/•c:outvalue=${param.data}default=NoData/•c:outvalue=p有特殊字符/p/•c:outvalue=p有特殊字符/pescapeXml=false/•1.在网页上显示HelloJSP2.0!!;•2.在网页上显示8;•3.在网页上显示由窗体传送过来的data参数之值,假若没有data参数,或data参数的值为null时,则网页上会显

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功