自定义JSP标签总结

作者: he_321 | 来源:发表于2016-11-09 01:02 被阅读0次

    自定义标签可以实现的功能:

    • 移除jsp中的java代码
    • 控制jsp中的某段程序是否执行
    • 控制jsp页面中的所有内容是否执行
    • 控制jsp中的程序重复执行
    • 修给jsp中的内容。

    传统标签库 总结:

    创建传统标签
    • 创建jsp标签类继承TagSupport类。
    • 重写doStartTag()方法,在doStartTag()方法中书写程序,此方法在执行开始标签的时候被服务器调用。服务器在遇到标签的时候先调用tag类的setPageContext(pageContext)方法将pageContext类传递进去。
    • 在WEB-INF下创建tld文件,在文件中对标签进行配置。
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
        <description>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>1.0</tlib-version>
        <short-name>SimpleTagLibrary</short-name>
          //将此标签绑定的uri,通过此uri引用标签
        <uri>http://www.baixinping.com</uri>
    
    <tag>
        <description>Outputs Hello, World</description>
          //引用时的名称
        <name>ha</name>
          //标签类的目录
        <tag-class>baixinping.tag.Ha</tag-class>
         //标签体中是否有内容
        <body-content>empty</body-content>
    </tag>
    </taglib>
    
    • 使用:<%@ taglib uri="http://www.baixinping.com" prefix="ha" %>
    控制jsp中的某段程序的输出:

    1、继承TagSupport
    2、重写doStartTag();
    3、如果doStartTag()返回TagSupport.SKIP_BODY,则不执行标签体中的内容,如果返回的是TagSupport.EVAL_BODY_INCLUDE则执行标签体中的内容。

    控制jsp页面是否执行。
    • 继承TagSupport
    • 重写doEndStart()
    • 如果doEndTag()返回TagSupport.SKIP_PAGE,则不执行余下的jsp中的内容。如果返回TagSupport.EVAL_PAGE,则继续执行余下的内容。
    控制部分代码重复执行
    • 继承继承TagSupport
    • 重写doAfterBody()方法,此方法在执行完标签体中的内容之后执行。
    • 如果doAfterBody()方法返回TagSupport.EVAL_BODY_AGAIN,则继续执行标签体中的内容。如果返回TagSupport.SKIP_BODY则继续执行doEndTag()方法。
    修改jsp中的内容
    • 继承BodyTagSupport。此类在执行完doStartTag()完之后会自动执行setBodyContent()方法将标签体中的内容传递给标签类。然后执行doEndTag方法。
    • doEndTag()方法中通过this.getBodyContent()获取标签体内容对象,然后对其进行修改即可。

    简单标签库使用 总结:

    继承SimpleTagSupport。tld文件中声明有标签体使用<body-content>scriptless</body-content>,意思是标签体中不能有脚本代码(java程序)

    简单标签执行步骤(原理):

    • 遇到简单标签之后,先实例化标签类。
    • 调用setJspContext()pageContexr()将jsp页面对象传递过来。
    • 调用setParent()方法将标签的父标签传递过来,如果没有父标签传递null.
    • 调用setJspBody()将封装了标签体内容的JspFragment对象传递过来。
    • 执行标签(调用doTag()方法),控制标签之后的内容不被执行,只需要抛出new SkipPageException()即可。
      JspFragment content = this.getJspBody();
      content.invoke(this.getJspContext().getOut());
      使用invoke()方法将内容写入对应的流缓冲区中。
    • 垃圾回收器回收标签对象(在传统标签中,标签对象会驻留在内存中继续服务之后的调用)

    标签定义属性:

    • 在标签类中创建属性值,并创建set方法。
    • 在tld文件中声明属性。
                <tag>
                <description>Outputs Hello, World</description>
                <name>test6</name>
                <tag-class>baixinping.tag.Test6</tag-class>
                <body-content>scriptless</body-content>
                <attribute>
                    //属性名
                    <name>count</name>
                    //属性是否必须
                    <required>true</required>
                    //属性值是否可以使用表达式
                    <rtexprvalue>true</rtexprvalue>
                </attribute>
                </tag>
    

    注意:set方法会自动有服务器调用,服务器赋值只能够进行8中基本数据类型转换。若是复杂类型,则在jsp页面中使用表达式。

    相关文章

      网友评论

        本文标题:自定义JSP标签总结

        本文链接:https://www.haomeiwen.com/subject/bxyzuttx.html