简单标签库功能

简单标签的生命周期:jsp引擎遇到简单标签首先创建类的对象,第二步调用setPageContext()方法,把页面的pageContext()对象传递进去,第三步调用setParent()方法,第四步调用setJSPBody()方法把标签体传递进去,第五步执行标签调用doTag()方法。

简单标签库功能_第1张图片
简单标签执行流程.png

简单标签和传统标签的区别:传统标签执行完标签后对象不摧毁,驻扎在内存里面,为后续的请求服务,简单标签的doTag()方法执行完对象就摧毁了。

前文讲了用传统标签在jsp页面引入逻辑,现在我就介绍怎么用简单标签控制jsp页面内容的输出。

  • 用简单标签控制是否输出标签体

① 标签处理器类 TagBodyIsOut

package cn.itcast.web.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class TagBodyIsOut extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
        jf.invoke(this.getJspContext().getOut());//是否输出的关键
    }
}

② 标签库描述符文件 SimpleTag.tld



    A tag library exercising SimpleTag handlers.
    1.0
    itcast
    /http://www.SimpleTag.com
    
        TagBodyIsOut
        cn.itcast.web.simpletag.TagBodyIsOut
        scriptless
    

③ jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="simple" uri="/http://www.SimpleTag.com" %>


    使用标签控制标签体的输出


aaaa


  • 控制标签体重复输出

① 标签处理器类 TagBodyRepeat

package cn.itcast.web.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class TagBodyRepeat extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
        for (int i = 0; i < 5; i++) {
            //null默认就是输出,作用与jf.invoke(this.getJspContext().getOut());相同
            jf.invoke(null);
        }
    }
}

② 在标签库描述符文件 SimpleTag.tld 里添加如下代码:


        TagBodyRepeat
        cn.itcast.web.simpletag.TagBodyRepeat
        scriptless
    

③ 在jsp文件里引用:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="simple" uri="/simple" %>


    迭代标签体


重复输出本段文字
  • 修改标签体的输出
    ① 标签处理器类 TagBodyUpdate
package cn.itcast.web.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.io.StringWriter;

public class TagBodyUpdate extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf = this.getJspBody();
        StringWriter sw = new StringWriter();
        jf.invoke(sw);

        String content = sw.toString();
        content = content.toUpperCase();
        this.getJspContext().getOut().write(content);
    }
}

② 在标签库描述符文件 SimpleTag.tld 里添加如下代码:


        TagBodyUpdate
        cn.itcast.web.simpletag.TagBodyUpdate
        scriptless
    

③ 在jsp文件里引用:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="simple" uri="/simple" %>


    修改标签体


aaaaaa


  • 控制标签余下的jsp不执行

① 标签处理器类 TheOtherisOut

package cn.itcast.web.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.SkipPageException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class TheOtherisOut extends SimpleTagSupport{
    @Override
    public void doTag() throws JspException, IOException {
        throw new SkipPageException();
    }
}

② 在标签库描述符文件 SimpleTag.tld 里添加如下代码:


        TheOtherisOut
        cn.itcast.web.simpletag.TheOtherisOut
        empty
    

③ 在jsp文件里引用:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="simple" uri="/simple" %>



    余下的不执行


asdfghjkl


你可能感兴趣的:(简单标签库功能)