自定义JSP标签库

客户化JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁。这些可重用的标签能处理复杂的逻辑运算和事务,或者定义JSP网页的输出内容和格式。

创建自定义标签的步骤:

  1. 创建标签的处理类
  2. 创建标签库描述文件
  3. 在JSP文件中引入标签库,然后插入标签,例如:<mm:hello/>

标签库处理类:

  • Servlet容器编译JSP网页时,如果遇到自定义标签,就会调用这个标签的处理类。
  • 标签处理类必须扩展以下两个类之一:
    • – javax.servlet.jsp.tagext.TagSupport
      • 主要方法:
        1. doStartTag    Servlet容器遇到自定义标签的起始标志时调用该方法
          • doStartTag()方法返回一个整数值,用来决定程序的后续流程。它有两个可选值: – Tag.SKIP_BODY 表示标签之间的内容被忽略。– Tag.EVAL_BODY_INCLUDE
            表示标签之间的内容被正常执行。
        2. doEndTag    Servlet容器遇到自定义标签的结束标志时调用该方法
          • doEndTag()方法返回一个整数值,用来决定程序后续流程。它有两个可选值: – Tag.SKIP_PAGE 表示立刻停止执行JSP网 页,网页上未处理的静态内容和JSP程序均 被忽略,任何已有的输出内容立刻返回到 客户的浏览器上。Tag.EVAL_PAGE 表示按正常的流程继续执 行JSP网页。
      • 常用方法:
        1. setValue(String k,Object o)    在标签处理类中设置key/value
        2. getValue(String k)    在标签处理类中根据参数key返回匹配的value
        3. removeValue(String k)    在标签处理类中删除key/value
        4. setPageContext(PageContext pc)   设置PageContext对象,该方法由Servlet容器在调用doStartTag或doEndTag方法前调用
        5. setParent(Tag t)     设置嵌套了当前标签的上层标签的处理类,该方法由Servlet容器在调用doStartTag或doEndTag方法前调用
        6. getParent()    返回嵌套了当前标签的上层标签的处理类
      • 两个重要属性:
        1. parent:代表嵌套了当前标签的上层标签的处理类
        2. pageContext : 代表Web应用中的javax.servlet.jsp.PageContext对象  
      • JSP容器在调用doStartTag或doEndTag方法前,会先调用setPageContext和setParent方法,设置pageContext和parent。在doStartTag或doEndTag方法中可以通过getParent方法获取上层标签的处理类;在TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类中可以直接访问pageContext变量。
      • 用户可以在自定义标签中包含属性:例如: <prefix:mytag username=“zhangsan">  ……  …… </prefix:mytag> 。在标签处理类中应该将这个属性作为成员变量,并且分别提供设置和读取属性的方法,
    • – javax.servlet.jsp.tagext.BodyTagSupport

标签库描述文件:

  • 标签库描述文件的后缀: .tld (是一个标准的xml文件)
  • 存放位置:必须和web.xml放在同一个目录下(也就是WEB-INF目录下)。

在jsp中引入标签:

  • 在test.jsp中加入引用mytaglib(处理类)的taglib指令:  

    <%@ taglib uri="/mytaglib" prefix="mm" %>   以上taglib指令中,prefix属性用来指定引用mytaglib标签库时的前缀。

  • 在test.jsp文件中插入hello标签:  <b><mm:hello/>

 

posted on 2013-02-01 12:21  阿波次的  阅读(187)  评论(0编辑  收藏  举报

导航