• jsp自定义标签


    主要步骤:

    1.创建自定义标签类,继承TagSupport类,并覆盖它的doStartTag(),doEndTag()等方法。

    2.在Web-Inf创建标签库描述文件*.tld。

    3.在web.xml中配置jsp标签的uri和路径。

    4.在需要使用此标签的jsp页面头部引入。

    更详细的开发步骤,实例讲解以及注意事项,http://www.cnblogs.com/zhaoyang/archive/2011/12/25/2301108.html

    部分内容讲述:

    1.jsp自定义标签的处理过程:

    (1) 当JSP容器在解释JSP页面时,如果遇到自定义标签的开始标记,将利用“标签处理类”建立一个“标签处理对象”。在建立“标签处理对象”的过程中,JSP容器会回调setPageContext( )方法,然后会根据自定义标签的属性值来初始化“标签处理对象”的属性。

    (2) 接着JSP容器会运行doStartTag( )方法内的程序代码,然后根据此方法的返回值决定后续动作,如果返回SKIP_BODY常量,表示要求JSP容器忽略此标签主体的内容;如果返回EVAL_BODY_INCLUDE常量,表示要求JSP容器执行标签主体的内容,并将结果包括在响应中,然后再运行doAfterBody( )方法。

    (3) 如果doAfterBody( )方法返回EVAL_BODY_AGAIN常量,表示要求JSP容器再次执行标签主体内容;如果返回SKIP_BODY常量,JSP容器将会运行doEndTag( )方法。

    (4) 最后,JSP容器会运行doEndTag( )方法内的程序代码,并根据此方法的返回值决定后续动作——如果返回SKIP_PAGE常量,JSP容器会忽略自定义标签以后的JSP内容;如果返回EVAL_PAGE常量,JSP容器会运行自定义标签以后的JSP内容

    2.doStartTag() 以及 doEndTag()等方法的返回值的作用:

    SKIP_BODY
    表示不用处理标签体,直接调用 doEndTag() 方法。

    SKIP_PAGE
    忽略标签后面的 JSP 内容。

    EVAL_PAGE
    处理标签后,继续处理 JSP 后面的内容。

    EVAL_BODY_BUFFERED
    表示需要处理标签体。

    EVAL_BODY_INCLUDE
    表示需要处理标签体 , 但绕过 setBodyContent() 和 doInitBody() 方法

    EVAL_BODY_AGAIN
    对标签体循环处理。

    或者可以这样理解:

    标签中静态常量:

    EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流
    SKIP_BODY:告诉服务器不要处理正文内容
    EVAL_PAGE:让服务器继续执行页面
    SKIP_PAGE:让服务器不要处理剩余的页面
    EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回
    EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
    EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回

    3.加载BodyTagSupport类的方法:
    编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();


    他们执行顺序如下:
    doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()


    doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,
    如果返回EVAL_BODY_INCLUDE则继续执行;
    如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行,
    而直接执行doEndTag()方法。

    setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。
    标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,
    EVAL_PAGE或SKIP_PAGE。
    如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY;
    如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分;
    如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。

  • 相关阅读:
    The Preliminary Contest for ICPC China Nanchang National Invitational and International Silk-Road Programming Contest
    HDU 5299 Circles Game
    UVALive
    算法笔记--匈牙利算法
    算法笔记--Splay && Link-Cut-Tree && fhq _treap
    P2685 [TJOI2012]桥
    2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
    ACM-ICPC2018南京赛区 Mediocre String Problem
    Project Euler 345: Matrix Sum
    算法笔记--manacher算法
  • 原文地址:https://www.cnblogs.com/cuiyf/p/3367022.html
Copyright © 2020-2023  润新知