现在的位置: 首页 > 综合 > 正文

JSP标签

2017年08月22日 ⁄ 综合 ⁄ 共 3489字 ⁄ 字号 评论关闭

一 。自定义JSP标签的处理过程:
  1.在JSP中引入标签库:
  2.在JSP中使用标签库标签
  3.Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值
  4.Web容器根据uri属性在web.xml找到对应的元素
    5.从元素中获得对应的元素的值
    6.Web容器根据元素的值从WEB-INF/目录下找到对应的.tld文件
    7.从.tld文件中找到与tagname对应的元素
    8.从元素中获得对应的元素的值
    9.Web容器根据元素的值创建相应的tag handle class的实例
    10. Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理

二。自定义标签步骤
1。定义标签实现类
    继承自TagSupport或者TagBodySupport
   
    JSP的servlet在处理tag的不同点调用不同的Tag handler方法,这些方法在Tag或者BodyTag接口中都有定义。
    当JSP的servlet遇到自定义tag的开始tag的时候,servlet首先调用方法初始化合适的handler,然后调用handler的doStartTag()方法;
    当JSP的servlet遇到自定义tag的结束tag的时候,servlet调用handler的doEndTag()方法。其他的方法在handler需要同tag的body相互作用的时候调用。
   
    doStartTag:当SP容器遇到自定义标签的起始标志,就会调用doStartTag()方法。
                      doStartTag()方法返回一个整数值,用来决定程序的后续流程。
                    A.Tag.SKIP_BODY:表示标签之间的内容被忽略
                    B.Tag.EVAL_BODY_INCLUDE:表示标签之间的内容被正常执行

    doEndTag:当JSP容器遇到自定义标签的结束标志,就会调用doEndTag()方法。

                     doEndTag()方法也返回一个整数值,用来决定程序后续流程。
                 A.Tag.SKIP_PAGE:表示立刻停止执行网页,网页上未处理的静态内容和JSP程序均被忽略任何已有的输出内容立刻返回到客户的浏览器上。
                 B.Tag.EVAL_PAGE:表示按照正常的流程继续执行JSP网页
   
    ---------------------------------------------
    Tag handler类型        方法
    - - - - - - - - - - - - - - - - - - - - - - -
    简单                   doStartTag,doEndTag, release
    - - - - - - - - - - - - - - - - - - - - - - -
    包含属性               doStartTag,doEndTag, set/getProperties, release
    - - - - - - - - - - - - - - - - - - - - - - -
    有body,没有相互作用   doStartTag,doEndTag, release
    - - - - - - - - - - - - - - - - - - - - - - -
    有body,重复处理       doStartTag,doAfterBody, doEndTag, release
    - - - - - - - - - - - - - - - - - - - - - - -
    有body,有相互作用     doStartTag, doEndTag, release,doInitBody, doAfterBody
    ---------------------------------------------
   
    EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用
    EVAL_PAGE:继续处理页面,doEndTag()函数可用
    SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用
    SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用
    EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代
    EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
    EVAL_BODY_AGAIN:请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag的时候是很有用的。
   
   
2。定义tld文件
   
    TLD的root是taglib element,taglib element的子element在下面列出:
   
    <tlib-version><jsp-version><short-name>必填
    ---------------------------------------------
    Element        描述
    - - - - - - - - - - - - - - - - - - - - - - -
    tlib-version       tag库的版本
    jsp-version       tag库需要的JSP规范的版本
    short-name      可选,JSP的开发者可以使用一个容易记忆的名字
    uri                    一个URI,它独一无二的确定一个tag库
    display-name   可选,开发工具使用的显示名字
    small-icon         可选,开发工具使用的小图标
    large-icon         可选,开发工具使用的大图标
    description       可选,关于tag的详细的信息
    listener            参考下面的[listener Element]
    tag                  参考下面的[tag Element]
    ---------------------------------------------
 
    Tag在TLD中使用tag Element来指定,下面列出的是tag Element允许的子element:
   
    ---------------------------------------------
    Element                                描述
    - - - - - - - - - - - - - - - - - - - - - - -
    name                     唯一的tag名
    tag-class               Tag handler的类名
    tei-class                可选,javax.servlet.jsp.tagext.TagExtraInfo的子类
    body-content        Body内容的类型

                                 A. empty这个是一个空标记.

                                 B. scriptless 主体可以有内容, 而jsp容器会去处理里面的jsp元素,

                                     换句话就是可以是文本, EL表达式, 标准动作甚至另一个自定义标记.
                                 C. tagdependent 主体可以有内容, 而jsp容器会把它们当作纯文件处理 .
    display-name        可选,开发工具使用的显示名字
    small-icon             可选,开发工具使用的小图标
    large-icon             可选,开发工具使用的大图标
    description           可选,关于tag的详细的信息
    variable                可选,脚本变量信息
    attribute               Tag的属性信息
    ---------------------------------------------

抱歉!评论已关闭.