版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、自定义标签IT资讯交流网 什么是自定义标签自定义标签是指JSP自定义标签。自定义标签在功能上逻辑上与javaBean 类似,都封装Java 代码。自定义标签是可重用的组件代码,并且允许开发人员为复杂的操作提供逻辑名称。自定义标签是在JSP1.1规范里最早提出的 从标签的来源上看,JSP中的标签库可以分为两种类型:一种是JSP标准标签库(JSP Standard Tag Library,JSTL),它是JSP开发环境供应商开发的;另一种是JSP开发环境的使用者(即用户)自己定义的标签。通过使用标签库,可以简化JSP和Web应用程序的开发,减少JSP中的脚本代码量,大大降低JSP页面的复杂度,并且
2、使代码最大程度地重用IT资讯交流网 标签库的接口和类的继承关系标签库 API 定义在 javax.servlet.jsp.tagext 包中IT资讯交流网 标签库的接口和类的继承关系 开发自定义标签,其核心就是要编写处理器类,一个标签对应一个标签 处理器类,而一个标签库则是很多标签处理器的集合。JSP所有的标签 处理器类都实javax.servlet.jsp.tagext.JspTag接口。这个接口是一个标记接口,它有两个直接子接口:简单标签:标签处理类实现SimpleTag接口,它是JSP2.0新增加的接口,代表简单的标签;经典标签:jsp2.0以前标签处理类实现Tag接口,它是经典的、必须
3、实现的接口,它有一个直接子接口IterationTag。IT资讯交流网 自定义标签的分类分类 说明 范例 正常标签(Standard Tag)包含起始标签、标签体、结束标签 Select * from emp空标签(Empty Tag)没有标签体,但可包含标签的属性ATMjsp:ATM/嵌套标签(Nested Tag)自定义标签内包含其他自定义标签 IT资讯交流网 开发自定义标签的步骤根据业务要求确定标签形式编写标签处理器类(Tag Handler Class)编写标签的描述文件tld(Tag Library Desscriptor File)web.xml文件(在其中指定tld的位置)(在s
4、ervlet2.4,jsp2.0以上的版本 不用配置此项)JSP页面导入和使用标签IT资讯交流网 自定义标签的执行流程浏览器JSP引擎(碰到JSP文件中的标签指令)TLD文件标签处理类请求应答查找调用处理结果IT资讯交流网 SimpleTag接口优点 JSP 2.0中加入了新的创建自制标记的API javax.servlet.jsp.tagext.SimpleTag,该 API定义了用来实现简单标记的接口。 1、和JSP 1.2中的已有接口不同的是,SimpleTag接口 不使用doStartTag()和doEndTag()方法,而提供了一个简单的doTag()方法。这个方法在调用该标记时只被
5、使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲,SimpleTag可以和IterationTag达到同等的作用。但SimpleTag的方法和处理周期要简单得多。 2、在SimpleTag中还有用来设置JSP内容的setJspBody()和getJspBody()方法。Web容器会使用setJspBody()方法定义一个代表JSP内容的JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中根据需要多次调用getJspBody().invoke()方法以处理JSP内容。 3、对于前台WEB页面制作人员:在JS
6、P1.2时代,Taglib页面调用实际上是比较复杂的,SimpleTag+EL表达式语言极大的简化了Taglib调用,真正达到不懂JAVA的人员也可以轻松编写 JSP页面的目的。IT资讯交流网 SimpleTag 接口setJspContext 方法:该方法把代表 JSP 页面的 pageContext 对象传递给标签处理器对象。setParent 方法:该方法把父标签处理器对象传递给当前标签处理器对象getParent 方法:该方法用于获得标签的父标签处理器对象setJspBody 方法:该方法用于把代表标签体的 JspFragment 对象传递给标签处理器对象doTag 方法:该方法用于完
7、成所有的标签逻辑。该方法可以抛出 javax.servlet.jsp.SkipPageException 异常,用于通知 web 容器不再执行 JSP 页面中位于结束标记后面的内容。IT资讯交流网 实现 SimpleTag 接口的标签处理器类的生命周期setJspContextsetParentsetXXXsetJspBodydoTag1.Jsp 引擎将代表 JSP 页面的 pageContext 对象传递给标签处理器对象2.Jsp 引擎将父标签处理器 对象传递给当前标签处理 器对象。只有存在父标签 时,jsp 引擎才会调用该 方法3.设置标签属性。只有定义 属性才调用该方法4. 若存在标签体
8、, JSP 引擎将把标签体封装成一个 JspFragment 对象,调用 setJsddpBody 方法将 JspFragment 对象传递给标签处理器对象。若标签体为空,这 setJspBody 将不会被 JSP 引擎调用5.容器调用标签处理器对象的 doTag 方法执行标签逻辑IT资讯交流网 JspFragment 类该类的实例对象代表 JSP 页面中的一段符合 JSP 语法规范的 JSP 片段,这段 JSP 片段不能包含 JSP 脚本元素()JSP 引擎在处理简单标签的标签体时,会把标签体内容用一个 JspFragment 对象表示,并调用标签处理器对象的 setJspBody 方法把
9、JspFragment 对象传递给标签处理器对象。得到代表标签体的 JspFragment 对象后,标签开发者就可以在标签处理器中根据需要调用 JspFragment 对象的方法,进而决定如何处理标签体。IT资讯交流网 JspFragment 类getJspContext 方法:该方法用于返回代表调用页面的 JspContext 对象Invoke 方法(java.io.Writer out):该方法用于执行 JspFragment 对象所代表的 JSP 代码片段。在 doTag() 方法中可以根据需要调用该方法。该方法的参数 out 用于指定将 JspFragment 对象的执行结果写入到哪个
10、输出流对象中。若传递参数 out 的值为 null,则将执行结果写入到 JspContext.geOut() 方法返回的输出流对象中。若想在标签处理器中修改标签体内容:需在调用 invoke 方法时指定一个可取出结果数据的输出流对象(如:StringWriter),让标签体的执行结果输出到该输出流中,然后从该输出流对象中取出数据进行修改后再输出到目标设备IT资讯交流网 SimpleTagSupport为简化简单标签处理器的编写工作,JSP API 中提供了 SimpleTag接口的一个实现类SimpleTagSupport。 SimpleTagSupport实现了SimpleTag接口中的方法
11、,它 内部以成员变量的形式保存了setJspContext方法和setJspBody方法传递进来的参数。此外,它还定义了如 下两个方法、来返回这两个参数:getJspContext方法:该方法用于返回代表调用页面的JspContext对象getJspBody方法:该方法用于得到代表标签体的JspFragment对象,IT资讯交流网 标签库描述文件标签库描述(Tag Library Description)文件简称为 tld 文件,其扩展名为 .tld多个标签的集合就形成了一个标签库,标签库中的所有标签都必须在标签文件中进行描述Tld 文件可以放置在 web 应用程序的 WEB-INF 目录及其
12、子目录中,但不能放置在 WEB-INF 目录下的 classes 和 lib 子目录中 。tld 文件也可以放置在 WEB-INFlib 目录下的 jar 包的 META-INF 目录及其子目录中服务器启动时查找的顺序:IT资讯交流网 标签库描述文件:指定标签体的类型。可能取值有 3 种:empty:没有标签体scriptless:标签体可以包含 el 表达式和 JSP 动作元素,但不能包含 JSP 的脚本元素tagdependent:表示标签体交由标签本身去解析处理。若指定 tagdependent,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器IT资讯交
13、流网 在 JSP 页面引用自定义标签在 JSP 页面使用 taglib 指令引入标签库描述文件: uri:属性用于指定所引入的标签库描述(tld)文件中所定义的 元素的内容;prefix 属性用于为引入的 tld 文件指定一个”引用代号”。Prefix 属性可以由 jsp 文件的作者任意指定,只要与其他 taglib 指令的 prefix 属性值不同就可以。IT资讯交流网 自定义标签1定制一个标签, 输出当前的日期IT资讯交流网 自定义标签例子2定制一个带有两个属性的标签, 用于计算并输出两个数的最大值IT资讯交流网 自定义标签例子itcast 0.1 core libraryitcast c
14、ore0.1itcastIT资讯交流网 自定义标签例子 maxValue com.itcast.mytag.MaxValueTag empty num1 true true IT资讯交流网 自定义标签例子3定制一个带有三个属性的标签, 用于按指定的步长输出值 IT资讯交流网 自定义标签例子4定制一个带有一个属性的标签, 用于输出指定文件的内容 IT资讯交流网 自定义标签例子5定制一个带含有标签体的标签,并把标签体的内容全部输出转化为大写 asdfdsfsdfghhhhhhhhhhhhhhhhttyhnfghgfh IT资讯交流网 自定义标签例子6定制一个用于迭代输出集合(List)中所有元素的
15、标签: $ * $stu.age IT资讯交流网 自定义标签例子7定制一个用于迭代输出集合(Set)中所有元素的标签: $ * $stu.age IT资讯交流网 自定义标签例子8定制一个用于迭代输出数组中所有元素的标签: $*$stu.age IT资讯交流网 自定义标签例子9定制一个用于迭代输出(数组、List、set)中所有元素的标签: List: $*$stu.age IT资讯交流网 自定义标签例子10定制一个用于迭代输出(Map)中所有元素的标签: $stu.key*$stu.value*$stu.value.age*$ IT资讯交流网 自定义标签例子11定制一个用于迭代输出(数组、Li
16、st、set、Map)中所有元素的标签: $*$stu.age map处理 $stu.key*$stu.value*$stu.value.age*$IT资讯交流网 EL 自定义函数EL 自定义函数:在 EL 表达式中调用的某个 Java 类的静态方法,这个静态方法需在 web 应用程序中进行配置才可以被 EL 表达式调用。EL 自定义函数可以扩展 EL 表达式的功能,让 EL 表达式完成普通 Java 程序代码所能完成的功能。IT资讯交流网 EL 自定义函数开发步骤编写 EL 自定义函数映射的Java 类中的静态方法: 这个 Java 类必须带有 public 修饰符,方法必须是这个类的带有
17、public 修饰符的静态方法编写标签库描述文件(tld 文件), 在 tld 文件中描述自定义函数在 JSP 页面中导入和使用自定义函数IT资讯交流网 在 tld 文件中描述 EL 自定义函数为了能够让一个 Java 类的静态方法可以被 EL 表达式调用,需要在一个标签库描述文件(tld 文件)中对 EL 自定义函数进行描述,已将 Java 类中的静态方法映射成一个 EL 自定义函数IT资讯交流网 在 tld 文件中描述 EL 自定义函数 my el function myelfunction0.1itcastelhttp:/ toGBK cn.itcast.el.ELFunctionDef
18、ined java.lang.String toGBK(java.lang.String)IT资讯交流网 在 JSP 页面中导入和使用 EL 自定义函数在标准 JSP 页面中使用 taglib 指令来引入 tld 文件: uri:属性用于指定所引入的标签库描述(tld)文件中所定义的 元素的内容;prefix 属性用于为引入的 tld 文件指定一个”引用代号”。Prefix 属性可以由 jsp 文件的作者任意指定,只要与其他 taglib 指令的 prefix 属性值不同就可以。调用 EL 自定义函数: $itcasel:aa(param.username)IT资讯交流网 练习编写 3 个 E
19、L 自定义函数:计算输入字符串的长度完成对字符串的截取完成两个数相除的功能 gbk $itcastel:toGBK(param.username) utf-8:$itcastel:toUTF8(param.username) subString -$itcastel:subString(param.username,1,4) getLength: itcastel:getLength(param.username) IT资讯交流网 jstl fn 函数 (1)为了简化在 JSP 页面操作字符串,JSTL 中提供了一套 EL 自定义函数,这些自定义函数包含了 JSP 页面经常要用到的字符串操作在JSTL的表达是中要使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职工业机器人技术应用(机器人维护基础)试题及答案
- 2026年厨房电器销售(需求分析)试题及答案
- 2025年高职高聚物生产技术(高聚物生产应用)试题及答案
- 2025年中职烟草栽培与加工(烟草分级技术)试题及答案
- 近七年北京中考物理试题及答案2025
- 养老院老人康复设施维修人员晋升制度
- 养老院工作人员保密制度
- 信息技术合同与项目管理制度
- 工行合规培训课件
- 2026年医师内科学速记题库含答案
- 天津市八校联考2025届高三上学期1月期末考试英语试卷(含答案无听力原文及音频)
- 2026届辽宁省辽南协作校高一数学第一学期期末监测试题含解析
- 2026瑞众保险全国校园招聘参考笔试题库及答案解析
- 2025年山东省枣庄市检察院书记员考试题(附答案)
- 寒假安全教育课件模板
- 短视频内容版权协议2025年执行版
- 社区康养服务活动方案
- 2025年数字印刷可行性报告
- 畜禽屠宰加工工国家职业标准(征求意见稿)
- 电力通信安全培训资料课件
- 上海国安面试题库及答案
评论
0/150
提交评论