1. 步骤
*标签处理类(标签也是一个对象,那么就需要先有类!)
*tld文件,它是一个xml
*页面中使用<%@taglib%>来指定tld文件的位置
SimpleTag接口:
*void doTag():每次执行标签时都会调用这个方法;
*JspTag getParent():返回父标签(非生命周期方法)
*void setParent(JspTag):设置父标签
*void setJspBody(JspFragment):设置标签体
*void seetJspContext(JspContext):设置jsp上下文对象,它儿子是PageContext
其中doTag()会在其他三个方法之后被tomcat调用。
标签处理类:继承SimpleTagSupport类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
// 获取JspContext对象,再获取out对象,再向页面输出
// 获取到的JspContext其实就是当前页面的pageContext对象
this.getJspContext().getOut().write(“
Hello SimpleTag!
”) ;tld文件一般都放到WEB-INF之下,这样保证客户端访问不到!
标签描述符文件(tld)
/WEB-INF/tlds/itcast.tld
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee";
xmlns:xml="http://www.w3.org/XML/1998/namespace";
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 ">
<tlib-version>1.0tlib-version>
<short-name>itcastshort-name>
<uri>http://www.itcast.cn/tagsuri>;
<tag>
<name>helloname>
<tag-class>cn.itcast.tag.HelloTagtag-class>
<body-content>emptybody-content>
tag>
taglib>
<%@ taglib prefix=”it” uri=”/WEB-INF/tlds/itcast-tag.tld” %>
……
导标签库,就是为页面指定tld文件的位置!
1. 标签处理类
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
PageContext pc = (PageContext) this.getJspContext();
HttpServletRequest req = (HttpServletRequest) pc.getRequest();
String s = req.getParameter(“exec”);
if(s != null && s.endsWith(“true”)) {
// 获取标签体对象
JspFragment body = this.getJspBody() ;
// 执行标签体
body.invoke (null);
}
}
}
2. tld
标签体内容
* empty:无标签体!
* JSP:jsp2.0已经不在支持这个类型了!表示标签体内容可以是:java脚本,可以是标签,可以是el表达式
* scriptless:只能是EL表达式,也可以是其他的标签!
* tagdependent:标签体内容不会被执行,而是直接赋值标签处理类!
不在执行标签下面内容的标签!
在标签处理类中的doTag()中使用SkipPageException来结束!
Tomcat会调用标签处理类的doTag()方法,然后Tomcat会得到SkipPageException,它会跳过本页面其他内容!
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().print("只能看到我!
");
throw new **SkipPageException**();
}
带有属性的标签
步骤:
1. 给你的标签处理类添加属性!
为标签处理类添加属性,属性至少要且一个set方法!这个set方法会在doTag()方法之前被tomcat执行!所在doTag()中就可以使用属性了。
public class IfTag extends SimpleTagSupport {
private boolean test;//设置属性,提供getter/setter方法
public boolean isTest() {
return test;
}
public void setTest (boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {//如果test为true,执行标签体内容
this.getJspBody().invoke(null);
}
}
}
2. 在tld文件中对属性进行配置
<tag>
<name>ifname>
<tag-class>cn.itcast.tag.IfTagtag-class>
<body-content>scriptlessbody-content>
<attribute>
<name>testname>
<required>truerequired>
<rtexprvalue>truertexprvalue>
attribute>
tag>