自定义标签

1 自定义标签的概念
一)定义:用户自己定义实现一定功能的标签(xml)。
二)自定义标签的优点:
    在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。(移植简易)
    简化了JSP和WEB应用程序的开发。(开发简化)
    以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。(页面简洁)
三)自定义标签的特点:
1) 通过调用页面传递参数实现定制
2) 访问所有对JSP页面可能的对象
3) 修改调用页面生成的响应
4) 自定义标签间可相互通信
5) 在同一个JSP页面中通过标签嵌套,可实现复杂交互。
2 自定义标签的分类
   简单标签:如< mytag:helloworld/>
   带属性标签:如<imytag:checkinput dbname = "erp"/>
   带标签体的标签:在自定义标签的起始和结束标签之间的部分为标签体(Body)。Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。如:
 
2 自定义标签的构成
   需要两个组件:
   一个是描述标记特征的标记库描述文件(TLD文件)
   另一个是Java类,也称为标记处理器
3 标记库描述符(TLD)文件的定义
标签库描述文件,简称TLD,采用XML文件格式,定义了用户的标签库。内容开始是整个库的描述,然后是tag的描述,标记库描述符(TLD)文件用于Web Container确认tag以及JSP页面发展工具,TLD文件中的元素可以分成3类:
   A 标签库元素
      标签库元素用来设定标签库的相关信息,它的常用属性有:
      shortname: 指定Tag Library默认的前缀名(prefix)
      uri: 设定Tag Library的惟一访问表示符
   B 标签元素
     标签元素用来定义一个标签,它的常见属性有:
     name: 设定Tag的名字
     tagclass: 设定Tag的处理类
     bodycontent: 设定标签的主体(body)内容 有三个取值:
                1).empty:表示标签中没有body
                2).JSP:表示标签的body中可以加入JSP程序代码
                3).tagdependent:表示标签中的内容由标签自己去处理
     attribute:声明一个属性
   C 标签属性元素
     标签属性元素用来定义标签的属性,它的常见属性有:
     name:属性名称
     required:属性是否必需的,默认为false
     rtexprvalue:属性值是否可以为request-time表达式,也就是类似于< %=…% >的表达式
 
3 自定义标签的常用类
开发的标签Java类必须实现Tag或者BodyTag接口类,它们存储在javax.servlet.jsp.tagext下,BodyTag接口是继承了Tag接口的子接口,如果创建的自定义标签不带标签体,则可以实现Tag接口,如果创建的自定义标签包含标签体,则需要实现BodyTag接口。
   开发中常用的类有Tag、TagSupport以及BodyTagSupport。由TagSupport类实现的Tag接口定义了doStartTag()和doEndTag()方法,JSP容器在每个标记开始和结束的时候调用这些方法。由BodyTagSupport类实现的BodyTag接口(它是Tag接口的子接口)为处理标记体定义了doInitBody()和doAfterBody()方法, JSP容器在分析计算标记的正文体前后调用这些方法。
4 开发自定义标签的基本步骤:
   1)写一个tld文件(xml文件),指明uri(用户使用标签库),tag的name,class (表明哪个类解析该标签)
     如果带属性,还要在tag中增加attribute标签(name,required)
   2)写一个解析类(实现tag接口,继承一些缺省类TagSupport),在里面相应的方法(doStart,doEnd),对于带属性的标签,写上对应getter/setter
   
    如果两个标签类通讯:
    标签1解析类------pageContext-------标签2解析类。标签体
5 开发自定义标签的基本原理:
   1)根据taglib指令找对应的tld文件,如果使用的是URI属性,转换成相应的tld文件。
   2)找到标签名<name>和该标签的解析类<tagclass>(HelloTagHandler)
   3)新建一个解析类对象
   4)传递pageContext给HelloTagHandler对象,调用HelloTagHandler.setPageContext()用于初始化。
   5)设置属性
   6)调用其它的方法,比如doStartTag,doEndTag方法。服务器看标签,从标签开始到结束,标签开始可以触发一个事件startTag,调用方法doStartTag,标签结束触发一个事件endTag,调用方法doEndTag。
   生命周期:
   构造对象(构造方法和属性初始化)------setPageContext-------设置属性-----doStartTag-----setBodyContent(输出流交给标签体)-----doInitBody-----doAfterBody------doEndTag

你可能感兴趣的:(java,Web,jsp,xml)