Simple的生命周期:
1.在jsp中使用这个标签的实例后,调用setJspContext()
2.调用setParent():这个方法是在有标签嵌套的情况下调用
3.setters
4.setJspBody():如果标签体有body,调用此方法
5.doTag():所有的标签逻辑,业务计算,迭代都在这里实现
6.doTag() return的时候锁定属性值
和1TagSupport.2BodyTagSupport的区别:
没有doS,doE方法
doTag()只调用一次
没有标签池,每次再用的话需要从新创建
在body中不能有表达式
API:
SimpleTag接口和SimpleTagSupport实现类
引例1:
程序目标:有if功能的自定义标签
知识点:
1.JspFragment对象,原始body
2.getJspBody()将得到body
3.invoke(null):body的方法,执行body
4.tld的写法:在<body-content>中写scriptless
java类:
package yuchen.ctab.simpleTag.s1;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
public class SimpleIf extends SimpleTagSupport{
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>private boolean cond;</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>public void setCond(boolean cond) {</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>this.cond = cond;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>@Override</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>public void doTag() throws JspException, IOException {</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>// TODO Auto-generated method stub</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>JspFragment body=getJspBody();//原始body</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>if(this.cond){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>getJspBody().invoke(null);//执行body</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
}
tld:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>"<a href="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd</a>"></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<taglib>
<wbr><wbr><wbr><wbr><tlib-version>1.0</tlib-version></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><jsp-version>2.0</jsp-version></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><short-name>simpleif</short-name></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><uri>/mysimpleif</uri></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><tag></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><name>if</name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><tag-class>yuchen.ctab.simpleTag.s1.SimpleIf</tag-class></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><body-content>scriptless</body-content></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><attribute></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><name>cond</name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><required>true</required></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><rtexprvalue>true</rtexprvalue></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></attribute></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr></tag></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
</taglib>
jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
<wbr><wbr><wbr><wbr>pageEncoding="ISO-8859-1"%></wbr></wbr></wbr></wbr>
<%@taglib prefix="mysimpleif" uri="/mysimpleif" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<wbr><wbr><wbr><wbr><wbr><mysimpleif:if cond="true"></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world!</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></mysimpleif:if></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><mysimpleif:if cond="false"></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world!</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></mysimpleif:if></wbr></wbr></wbr></wbr></wbr>
</body>
</html>
引例2:
带有while循环功能的标签
知识点:
doTag方法只执行一次
invoke(null)null为默认的输出流,相当于getJspContext().getOut()
java类:
package yuchen.ctab.simpleTag.s2;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.*;
public class SimpleWhile extends SimpleTagSupport{
<wbr><wbr><wbr><wbr><wbr>private int counts;</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>public void setCounts(int counts) {</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>this.counts = counts;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>@Override</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>public void doTag() throws JspException, IOException {</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>// TODO Auto-generated method stub</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>JspFragment body=getJspBody();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>for(int i=0;i<this.counts;i++){</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>body.invoke(null);//null为默认的输出流,相当于</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//getJspContext().getOut()</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
}
tld:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>"<a href="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd</a>"></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<taglib>
<wbr><wbr><wbr><wbr><tlib-version>1.0</tlib-version></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><jsp-version>2.0</jsp-version></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><short-name>simplewhile</short-name></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><uri>/mysimplewhile</uri></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><tag></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><name>loop</name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><tag-class>yuchen.ctab.simpleTag.s2.SimpleWhile</tag-class></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><body-content>scriptless</body-content></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><attribute></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><name>counts</name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><required>true</required></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><rtexprvalue>true</rtexprvalue></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></attribute></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr></tag></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
</taglib>
jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
<wbr><wbr><wbr><wbr>pageEncoding="ISO-8859-1"%></wbr></wbr></wbr></wbr>
<%@taglib prefix="mysimplewhile" uri="/mysimplewhile" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<wbr><wbr><wbr><wbr><wbr><mysimplewhile:loop counts="5"></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>hello world<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></mysimplewhile:loop></wbr></wbr></wbr></wbr></wbr>
</body>
</html>