简单标签的生命周期:jsp引擎遇到简单标签首先创建类的对象,第二步调用setPageContext()
方法,把页面的pageContext()
对象传递进去,第三步调用setParent()
方法,第四步调用setJSPBody()
方法把标签体传递进去,第五步执行标签调用doTag()
方法。
简单标签和传统标签的区别:传统标签执行完标签后对象不摧毁,驻扎在内存里面,为后续的请求服务,简单标签的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