版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章制作JSP定制标签,教学目标 * 掌握JSP定制标签的工作机制。 * 掌握简单标签的编制、如何给标签添加属性。 * 掌握迭代标签的制作过程。 * 了解标签处理体内容的工作过程。 * 了解嵌套标签之间的通信机制。,10.1 制作一个简单的定制标签 通常,一套JSP定制标签库被打包成一个或多个JAR文件,而从构成上讲,它通常是由一个或多个称之为标签处理器的Java类文件和一个标签库描述TLD (Tag Library Descriptor File)文件组成的。,10.1.1 定制标签的结构 1. 定制标签的表现形式 定制标签与JSP操作采用相同的语法,包括开始标签、可选体内容和相应的结束
2、标签。 2. Tag接口 每一个JSP定制标签都是由一个称之为标签处理器的Java类进行处理的,而标签处理器是必须实现javax.servlet.jsp.tagext.Tag接口的特殊的Java类。,setPageContext(PageContext pc)。在标签生命周期的第一步,JSP处理器通过调用标签的setPageContext方法将当前JSP页面的pageContext对象作为参数传递给标签,让标签知道它当前所运行的JSP的环境。 这是标签访问JSP页面对象的惟一访问点。例如ServletRequest request = this.pageContext.getRequest()
3、; 这样,定制标签就获得了它所在的JSP页面的请求对象的引用了。,setParent(Tag t) 和getParent()。标签本身是可以嵌套的,这样一个标签就有权利知道它是否有外围标签,它的外围标签是谁。例如: 内层标签 ,doStartTag():该方法的返回类型是整数,Tag接口中提供的两个常量SKIP_BODY和EVAL_INCLUDE_BODY就是供doStartTag方法返回的。在标签的声明周期中,这两个值都有非常明确的意义。当doStartTag()方法返回为SKIP_BODY时,表示标签向JSP处理器表明它不希望JSP处理器对标签的体内容进行任何处理。 当调用返回为EVAL_
4、INCLUDE_BODY时,表示它需要JSP处理器对标签的体内容进行处理。,doEndTag()。当JSP遇到标签的结束标志时,调用doEndTag()方法。Tag接口中提供的两个常量SKIP_PAGE和EVAL_PAGE就是供给doEndTag()方法返回的常量。 当调用doEndTag()方法返回值为SKIP_PAGE时,表示标签希望JSP处理器不对剩余的JSP页面进行处理,而是结束对当前JSP页面的处理;当调用doEndTag()方法返回值为EVAL_PAGE时,表示标签希望JSP处理器应当对JSP页面的剩余内容进行处理。,10.1.2 制作一个简单的定制标签 实现定制标签需要以下步骤:
5、 编写标签处理器。 编写标签库描述文件。 部署标签库。 在JSP中导入和使用标签库。,编写标签处理器 编写标签处理器的起点是编写一个继承TagSupport类的java类。 例子:HelloWorldTag.java,2. 编写标签库描述文件 标签库描述文件又称TLD文件,是一个以.tld为后缀的XML文档。它包含了标签库中定制标签的元信息。 例子:example.tld 要加上 ,3. 部署标签库 在要使用HelloworldTag标签的Web应用程序的web.xml文件声明对该标签的TLD引用。 /hello /WEB-INF/lib/example.tld ,注意:要加上 ,4. 在JS
6、P页面中使用标签 把部署好的HelloworldTag标签嵌入到JSP页面中进行测试。 例子:HellworldTagTest.jsp,10.2 给标签加上属性 10.2.1 标签的属性 前面已经讲到,定制标签可以拥有自己的属性,这样JSP页面通过对定制标签的属性进行设置,以便向标签传递信息。,1. 如何在标签处理器内处理标签属性 在HelloworldTag.java中增加一个属性,如color,增加一个方法setColor()。 修改原来的doStartTag(),增加doEndTag(),为了能够使用color属性。,2. 在TLD文件中声明属性 除了在标签处理器内对标签属性进行编程外,
7、另外还必需在TLD文件中对定制标签的属性进行说明。 修改原来的example.tld中的empty为JSP。 增加一个元素。,3.在JSP页面中使用helloword标签 添加这个标签的属性color。,10.3 标签向JSP传递信息 通过提供属性,JSP页面可以向标签传递一些信息。标签通过作用范围属性向JSP页面传递信息。 在example.tld中添加一个 编写sum.java 编写sum.jsp,10.4 编制迭代标签 类似标签一样,使得JSP页面看起来简洁得多,非常容易维护。 例子:对应P276,图10-7,分析ForEach.java的流程。 编写TestForEach.jsp 修改
8、example.tld,10.5 访问并处理标签的体内容 通常,我们在编写支持体内容处理的标签时,是继承BodyTagSupport类,而不是直接实现BodyTag接口。 例子:HTMLFilter.java 编写TestHtmlFilter.jsp 修改example.tld,10.6 编制嵌套标签 协作标签通常是表现为在JSP页面上的嵌套的父标签和子标签。父标签和子标签之间进行信息传递的主要方式为: 使用脚本变量。 使用范围属性。 子标签访问父标签。,1. 使用脚本变量 使用脚本变量是给父标签在TLD文件中声明脚本变量,父标签在标签处理器中设置脚本变量,在子标签中使用这一信息时,通过将脚本
9、变量赋值给子标签的属性来达到目的。这种方式比较麻烦。,2. 使用范围属性 使用范围属性也非常简单,就是通过设置和范围(page、request、session、application)关联的属性传递信息。 , 例如: 在要输出信息的标签的处理器中将要输出的对象设置到范围属性中pageContext.setAttribute(myObject,object); 在需要该对象的标签中从页描述表中取出,pageContext.findAttribute(“myObject”);,3. 子标签访问父标签 子标签访问父标签的方式有两种: (1)使用Tag接口的getParent()方法。这个方法在Tag接口中定义,这个方法获得其父标签的引用,如果标签没有在任何其他标签内嵌套,则setParent()方法用null参数调用。 (2)使用TagSupport类的findAncestorWithClass()方法。有时嵌套的标签的层数很多,需要返回标签的祖先标签中的某一特定标签,用getParent()方法就可能达不到目的。这时可以利用TagSupport类的这个方法: public s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年山西省语文中考综合演练卷(含答案)
- 快速提分 2026-2027学年第一学期高三语文部编版上学期期中测试卷(含答案)
- 2027年河北省道德与法治初三考前保温卷(含答案)
- 夯实基础 2026-2027学年第一学期九年级生物苏教版第二单元单元测试卷(含答案)
- 巩固提高 2026年秋季八年级英语人教版上学期期中测试卷(含答案)
- 2027年山东省地理初三查缺补漏专练(含答案)
- 2027年河南省语文九年级真题改编卷(含答案)
- 湖南事业编社会工作岗 高频考题试卷 含答案解析
- 河北事业编综合管理岗 模拟预测试卷 含答案
- 2026年 财会岗事业编面试易错题集 题型分析 含答案
- 自考13635工程力学(机械)高频考点重点
- 2026新教科版四年级科学上册2.3《 呼吸的变化》课件
- 精算师考试风险管理试题汇编(带解析)
- 2026年采油工(高级技师)模拟试题(含答案)
- 广东省深圳市2026中考语文作文真题解读及范文
- 地下通道工程监理实施细则
- 12短文二篇 《答谢中书书》《与朱元思书》群文阅读公开课一等奖创新教学设计 统编版语文八年级上册
- 危险化学品无储存经营单位演练记录
- 工业人工智能导论 课件 第7-13章 群智能优化算法与生产调度- 智能机器人与应用
- 退血制度与流程规范
- 新能源车电控系统维修手册
评论
0/150
提交评论