已阅读5页,还剩94页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。JSTL标签库可分为5类:q 核心标签库q I18N格式化标签库q SQL标签库q XML标签库q 函数标签库本章将对这些内容一一讲述。9.1 核心标签库JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。(1)表达式控制标签:out标签、set标签、remove标签、catch标签。(2)流程控制标签:if标签、choose标签、when标签、otherwise标签。(3)循环标签:forEach标签、forTokens标签。(4)URL操作标签:import标签、url标签、redirect标签。在JSP页面引入核心标签库的代码为:下面将按照功能分类,分别讲解每个标签的功能和使用方式。9.2.1 表达式控制标签表达式控制分类中包括、4个标签,现在分别介绍它们的功能和语法。1标签【功能】:用来显示数据对象(字符串、表达式)的内容或结果。在使用Java脚本输出时常使用的方式为:在web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用标签就可以实现以上功能。提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然可以直接将结果返回给页面,但有时得到的结果为空,有特定的结果处理功能,EL的单独使用会降低程序的易读性,建议把EL的结果输入放入标签中。标签的使用有两种语法格式。【语法1】:【语法2】:默认值这两种方式没有本质的区别,只是格式上的差别。标签的属性介绍如下。q value:指定要输出的变量或表达式。q escapeXml:设定是否转换特殊字符(如<、>等一些转义字符),在默认值为true的情况下直接在输出<的,如果改为false将会进行转义输出“”等。q default:为默认输出结果。如果使用表达式得到的结果为null(注意与空区别),将会输出默认结果。【示例代码】:代码9.1演示了的使用,以及在不同属性值状态下的结果。代码9.1 标签使用示例:coredemo01.jsp1 2 3 4 5 out标签的使用6 7 8 (1) 9 (2)10 (3)11 (4)使用了默认值12 (5)13 14 【代码解析】:(1)第8行为的value属性赋值为字符串。(2)第9行和第10行对比,在改变escapeXml属性后页面输出的转义字符。(3)第11行value得到null,如果方法体内有值,将输出方法体中的字符串,否则不输出,第12行没有输出结果。程序运行结果如图9.1所示。图9.1 coredemo01.jsp运行结果【代码解析】:(1)直接输出了一个字符串。(2)字符串中有转义字符,但在默认情况下没有转换。(3)使用了转义字符<和>分别转换成符号。(4)设定了默认值,从EL表达式$null得到空值,所以直接输出设定的默认值。(5)未设定默认值,输出结果为空。2标签功能:主要用于将变量存取于JSP范围中或JavaBean属性中。标签的编写共有4种语法格式。语法1:存值,把一个值放在指定(page、session等)的map中。含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。语法2:值2含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。语法3:含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。语法4:值4含义:把一个值4赋值给指定的JavaBean的属性名。提示:从共能上分语法1和语法2、语法3和语法4的效果是一样的只是把value值放置的位置不同至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。【示例代码】:代码给出了给指定scope范围赋值的示例。使用标签把值放入session、application对象中。同时使用EL表达式得到存入的值。代码9.2 使用存取值:coredemo02.jsp1 2 3 4 5 set标签的使用6 7 8 把一个值放入session中。9 从session中得到值:$sessionS1 10 把另一个值放入application中。olive11 使用out标签和EL表达式嵌套得到值:12 未得到name的值13 未指定scope的范围,会从不同的范围内查找得到相应的值:$name1 、$name2 14 15 【代码解析】:(1)第8行通过标签将值name1的值放入session范围中。(2)第9行使用EL表达式得到name1的值。(3)第10行把name2放入application范围中。(4)第11行使用EL表达式从application范围中取值,用标签输出使得页面规范化。(5)第13行不指定范围使用EL自动查找得到值。程序运行的结果如图9.2所示。图9.2 coredemo02.jsp在代码中未使用任何Java脚本使用程序的功能。为了对比期间,代码9.3给出了使用Java脚本实现以上功能的例子。代码9.3 Java脚本实现值的存取:getvalue.jsp1 2 3 4 set标签的使用5 6 7 把一个值放入session中。8 从session中得到值:9 把另一个值放入application中。10 从application中得到值:11 12 【代码解析】:使用JSP内置对象的方法实现存值和取值的功能。程序运行结果如图9.3所示:图9.3 getvalue.jsp运行结果提示:本章示例为了方便期间都是从一个页面中存取,在开发中值的存取是为了不同的JSP页面之间共享数据从两个程序对比来看,JSTL实习了使用标签完成取值赋值的功能,减少代码的编写量同时避免了逻辑代码暴露的危险。【程序示例】:代码9.4和代码9.5演示使用操纵JavaBean。(1)创建一个JavaBean对象。代码9.4 JavaBean(vo数据传输对象):Person.java1 package org.olive;2 public class Person 3 private String name; /定义私有变量姓名字符串4 private int age; /定义私用变量年龄整型5 private char sex; /定义私用变量性别字符性6 private String home; /定义私用变量家乡字符串7 public String getName() /name的getter方法8 return name;9 10 public void setName(String name) /name的setter方法。11 = name;12 13 public int getAge() /age的getter方法14 return age;15 16 public void setAge(int age) /age的setter方法17 this.age = age;18 19 public char getSex() /sex的getter方法20 return sex;21 22 public void setSex(char sex) /sex的setter方法23 this.sex = sex;24 25 public String getHome() /home的getter方法26 return home;27 28 public void setHome(String home) /home的setter方法29 this.home = home;30 31 【代码解析】:一个只有getter和setter方法的JavaBean或者说一个pojo类,作为一个vo(数据传输对象)。定义了四个变量age、name、sex和home。(2)创建JSP页面,实现对值的操作。代码9.5 操作JavaBean:coredemo03.jsp1 2 3 4 5 6 set标签的使用7 8 9 maverick10 2511 男12 china13 使用的目标对象为:$person 14 从Bean中获得的name值为:15 从Bean中获得的age值为:16 从Bean中获得的sex值为:17 从Bean中获得的home值为:18 19 【代码解析】:(1)第1行设置页面格式和字符编码集。(2)第2行使用JSP的指令元素指定要使用的JavaBean。(3)第3行引入JSTL核心标签库。(4)第912行设置JavaBean的属性值,等同与setter方法。(5)使用EL表达式得到JavaBean的属性值,并用out标签输出。【关键代码】:负责实例化Bean,id指定实例化后的对象名,可以通过$person得到person在内存中的值(或者使用person.toString()方法)。maverickTarget指向实例化后的对象,property指向要插入值的参数名。注意:使用target时一定要指向实例化后的JavaBean对象,也就是要跟配套使用,也可以java脚本实例化,但这就失去了是用标签的本质意义。使用Java脚本实例化:%page import=”org.olive.Person”%程序运行结果如图9.4所示。图9.4 coredemo03.jsp运行结果3标签标签主要用来从指定的JSP范围内移除指定的变量。【语法】:其中var属性是必须的,scope可以以省略。【示例程序】:代码9.6使用set标签在session中插入2个值,然后用remove标签移除。代码9.6 标签示例:coredemo04.jsp1 2 3 4 5 remove标签的使用6 7 8 olive9 2510 男11 12 13 14 15 16 17 18 19 【代码解析】:(1)第89行使用set标签向session中插入三个值:name值为olive、age值为25、sex值为男。(2)第1113行使用out和EL表达式输出name、age、sex的值。(3)第14行使用remove标签移除age的值,然后使用步骤第1113行中的三个输出作为比较。4标签用来处理JSP页面中产生的异常,并将异常信息存储。【语法】:容易产生异常的代码【参数说明】:var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,当就不能显示的输出异常信息。【示例代码】:代码9.7使用标签,并设计一个异常并输出异常信息。代码9.7 标签使用示例:coredemo05.jsp1 2 3 4 5 JSTL: - catch标签实例6 7 8 catch标签实例9 10 11 12 13 14 15 【代码解析】:(1)第1012把容易产生异常的代码放在中,自定义一个变量error用于存储异常信息。(2)第11行实现了一段异常代码,向一个不存在的JavaBean中插入一个值。(3)第13行用EL表达式得到error的值,并使用标签输出。程序结果如图所示。图9.5 coredemo05.jsp图中异常信息的提示为:在标签中用不正确的参数“hao”。如果不捕获程序中的异常,也就是不使用捕获容易产生异常的代码,将会出现如图9.6所示,这是在开发中不允许的。图9.6 程序异常提示:本示例没有使用捕获Java脚本的样式,如果使用标签再使用Java脚本的意义不大,由此可以看出主要用于页面标签产生的异常。9.2.2 流程控制标签流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:标签、标签、标签和标签。下面将介绍这些标签的功能和使用方式。1标签同程序中的if作用相同,用来实现条件控制。【语法1】:【语法2】:【参数说明】:(1)test属性用于存放判断的条件,一般使用EL表达式来编写。(2)var指定名称用来存放判断的结果类型为true或false。(3)scope用来存放var属性存放的范围。【使用场景】:在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。【示例代码】:代码9.8实现了用户输入用户名提交到自身页面,页面判断用户是否为admin,如果是将出现欢迎界面,如果不是显示不同结果。代码9.8 标签使用示例:coredemo06.jsp1 2 3 4 5 JSTL: - if标签示例6 7 8 if标签示例9 10 11 12 13 14 15 16 17 18 $adminchock1920【代码解析】:(1)第1013行创建一个表单,表单中的元素为一个text文本输入框,一个提交按钮,并把信息提交给本页。(2)第14行使用if标签进行判断,如果输入的为admin将显示出定义的字符串,并把检验后的结果赋给adminchock,存储在默认的page范围中。(3)第18行使用EL表达式得到adminchock的值,如果输入的用户名为admin将显示true。程序运行效果如图9.7所示。图9.7 coredemo06.jsp运行结果提示:可以把adminchock的属性范围设置为session,可以在其他的页面中得到adminchock的值,使用判断,实现不同的权限。2、和标签这3个标签通常情况下是一起使用的,标签作为和标签的父标签来使用。【语法1】:./业务逻辑1./业务逻辑2./业务逻辑3【语法2】:表达式【语法3】:表达式【参数说明】:(1)语法1为3个标签的嵌套使用方式,标签只能和标签共同使用。(2)语法2为标签的使用方式,该标签都条件进行判断,一般情况下和共同使用。(3)不含有参数,只能跟共同使用,并且在嵌套中只允许出现一次。【示例代码】:代码9.9设定一个score变量的值为85,使用嵌套标签进行判断,根据判断返回结果。代码9.9 循环控制标签:coredemo07.jsp1 2 3 4 5 JSTL: - choose及其嵌套标签标签示例6 7 8 choose及其嵌套标签示例9 10 8511 12 c:when test=$score=9013 你的成绩为优秀!14 15 =70&score16 您的成绩为良好!17 18 60&score19 您的成绩为及格20 21 22 对不起,您没有通过考试!23 24 25 26 【代码解析】:(1)第10行通过set标签设定score的值为85。(2)第1222行使用进行条件判断。如果大于等于90,输出“您的成绩为优秀”;如果大于等于70小于90,输出“您的成绩为良好”;大于等于60小于70,输出“您的成绩为及格”;其他(otherwise)输出“对不起,您没能通过考试”。程序运行结果如图9.8所示。图9.8 coredemo07.jsp运行结果9.2.3 循环标签循环标签主要实现迭代操作。主要包含两个标签:和标签,接下来将详细介绍这两个标签的用法。1标签该标签根据循环条件遍历集合(Collection)中的元素。【语法】:本体内容【参数解析】:(1)var设定变量名用于存储从集合中取出元素。(2)items指定要遍历的集合。(3)varStatus设定变量名,该变量用于存放集合中元素的信息。 (4)begin、end用于指定遍历的起始位置和终止位置(可选)。(5)step指定循环的步长。参数类型和相关说明见表9-1。表9-1 循环标签属性说明名称EL类型是否必须默认值varNString是无itemsYArraysCollectionIteratorEnumerationMapString args是无beginYint否0endYint否集合中最后一个元素stepYint否1varStatusNString否无其中varStatus有4个状态属性(见表9-2)。表9-2 varStatus的4个状态属性名类型说明indexint当前循环的索引值countint循环的次数fristboolean是否为第一个位置lastboolean是否为第二个位置【示例代码】:代码9.10实现了遍历的两种方式:设定起始位置、不设定起始位置。同时实现了获得原属的状态信息。代码9.10 标签使用示例:coredemo08.jsp1 2 3 4 5 6 7 JSTL: - forEach标签实例8 9 10 11 12 21 22 23 24 25 26 27 28 29 30 31 的四种属性:32 所在位置,即索引:33 总共已迭代的次数:34 是否为第一个位置:35 是否为最后一个位置:36 37 38 【代码解析】:(1)第1318行通过Java脚本创建了一个集合对象a,并添加元素。(2)第19行使用setAttribute()方法把集合存入request范围内。(3)第2224行未指定begin和end属性,直接从集合开始遍历到集合结束为止。(4)第2628行指定从集合的第二个(index值为1)元素开始,到第四个(index值为3)元素截止(index的值从0开始)。并指定step为2即每隔两个遍历一次。(5)第3035指定varStatus的属性名为s,并取出存储的状态信息。程序运行结果如图9.9所示。图9.9 coredemo08.jsp运行结果【总结】:(1)从图中可以看到不使用begin和end的迭代,从集合的第一个元素开始,遍历到最后一个元素。(2)指定begin的值为1、end的值为3、step的值为2,从第二个开始首先得到晶晶,每两个遍历一次,则下一个显示的结果为莹莹,end为3则遍历结束。(3)从指定的begin和end的值来看遍历第四个和第五个,因得到莹莹和妮妮。相关状态信息如图所示。提示:本例使用的list是在JSP页面中使用Java脚本创建的,是因为JSTL缺少创建集合的功能,在开发中一般不会如此,可通过访问数据库得到数据集合,和通过设定JavaBean的值得到数据集合2该标签用于浏览字符串,并根据指定的字符将字符串截取。语法:【参数说明】(1)items指定被迭代的字符串。(2)delims指定使用的分隔符。(3)var指定用来存放遍历到的成员。(4)begin指定遍历的开始位置(int型从取值0开始)。(5)end指定遍历结束的位置(int型,默认集合中最后一个元素)。(6)step遍历的步长(大于0的整型)。(7)varStatus存放遍历到的成员的状态信息。【示例代码】:代码9.11实现了遍历一个有符号的字符串,把指定的符号移除。指定begin和end值,并获得遍历到的元素的状态信息。代码9.11 标签的示例:coredemo09.jsp1 2 3 4 5 JSTL: - forTokens标签实例6 7 8 9 10 11 12 13 14 15 16 17 的四种属性:18 所在位置,即索引:19 总共已迭代的次数:20 是否为第一个位置:21 是否为最后一个位置:22 23 24 【代码解析】:(1)本示例共实现了3个循环,1012行第一个循环实现了遍历给定字符串“北、京、欢、迎、您”,并除去循环中遇到的“、”号。(2)1315行第2个循环遍历一串带有分隔符的电话号码,不读取分隔符号,将显示一个字符串。(3)1622行第3个循环遍历一个带“*”号的字符串,根据指定的起始位置把元素取出,并显示每个元素的状态信息。提示:分隔符的作用是根据标识,截取字符串。如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。在实际应用中用于在除去某些符号在页面中显示。程序运行结果如图9.10所示。图9.10 coredemo08.jsp的属性varStatus的使用同的使用方法相同,在此就再不表述。9.2.4 URL操作标签JSTL包含3个与URL操作有关的标签,分别为:、和标签。它们的作用为:显示其他文件的内容、网页导向、产生URL。下面将详细介绍这3个标签的使用方法。1标签该标签可以把其他静态或动态文件包含到本JSP页面。同的区别为:只能包含同一个web应用中的文件。而可以包含其他web应用中的文件,甚至是网络上的资源。语法1:语法2:主要参数见表9-3。表9-3 标签参数说明名称说明EL类型必须默认值url被导入资源的URL路径YString是无context相同服务器下其他的web工程,必须以“”开头YString否无var以String类型存入被包含文件的内容。NString否无Scopevar变量的JSP范围NString否pagecharEncoding被导入文件的编码格式YString否无varReader以Reader类型存储被包含文件内容NString否无【参数说明】:(1)URL为资源的路径,当应用的资源不存在时系统会抛出异常,因此该语句应该放在语句块中捕获。应用资源有两种方式:绝对路径和相对路径。使用绝对路径示例如下:使用相对路径的实例如下:aa.txt放在同一文件目录。如果以“/”开头表示应用的根目录下。例如:tomcat应用程序的根目录文件夹为webapps。导入webapps下的文件bb.txt的编写方式为:如果访问webapps管理文件夹中其他web应用就要用context属性。(2)context属性用于在访问其他web应用的文件时,指定根目录。例如,访问root下的index.jsp的实现代码为:等同于webapps/root/index.jsp(3)var、scope、charEn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年各工种岗位作业安全考核考前冲刺练习试题【全优】附答案详解
- 【低空经济】低空太阳能充电网络建设方案
- 2026年一级建造师之一建民航机场工程实务每日一练试卷及参考答案详解(新)
- 低空巡检平台建设方案
- 2026年客家土楼幼儿园
- 2026年地震幼儿园逃生指南
- 2025福建福州宏诚工程建设监理有限公司社会招聘4人笔试参考题库附带答案详解
- 2025福建泉州文旅集团招聘61人笔试参考题库附带答案详解
- 2025神农科技集团有限公司第一批校园招聘17人笔试参考题库附带答案详解
- 2025湖南省各市州湘能农电服务有限公司联合招聘780人笔试参考题库附带答案详解
- 基因治疗产品生产工艺清洁验证残留限度
- 2025年潍坊职业学院辅导员考试笔试题库附答案
- 2026年河南交通职业技术学院单招职业技能测试必刷测试卷附答案
- 2025年吐鲁番市法检系统招聘聘用制书记员考试(23人)模拟试卷及参考答案
- 2024年贵州省中考英语试卷(含答案)
- 三年(2023-2025)广东中考化学真题分类汇编:专题09 质量守恒定律和化学方程式(原卷版)
- 金属非金属矿山安全培训管理规定
- 2025年大学《火灾勘查-火灾痕迹鉴定》考试模拟试题及答案解析
- 2025年西藏初中班(校)招生全区统一考试语文试卷
- 昆虫旅馆课件
- 农村旧房木梁拆除方案(3篇)
评论
0/150
提交评论