=========自定义标签学习总结=========
标签的运行方式是:
JSP页面解析中发现自定义标签,则到上面的标签说明中寻找:如
<%@ taglib uri="/mytitle.tld" prefix="dada"%>
此时它会找到该标签的uri ,uri 在web.xml中已经定义了
<taglib>
<taglib-uri>/mytitle.tld</taglib-uri>
<taglib-location>/WEB-INF/mytitle.tld</taglib-location>
</taglib>
此时它会通过uri在web.xml中查找到该标签的描述文件tld。那么在tld描述文件中又定义了该标签的处理类,具体完成业务的操作,标签处理类继承TagSupport,处理类完成操作后将返回页面。
<name>title</name>
<tagclass>com.derek.tags.TitleTag</tagclass>
准备工作 :首先在WEB-INF/lib下添加taglibs-log.jar包
1、创建标签描述文件
在WEB-INF下新建一个tld文件,该文件描述了此tld文件将由那个处理类完成操作,并且定义了该标签的属性。一个<taglib>中可以有很多个<tag>,由<name>标签名区分。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>html</shortname>
<uri>http://jakarta.apache.org/struts/tags-html</uri>
<tag>
<name>title</name>
<tagclass>com.derek.tags.TitleTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>begin</name>
<required>true</required>
</attribute>
<attribute>
<name>end</name>
<required>true</required>
</attribute>
</tag>
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
</taglib>
2、创建标签处理类
该类继承 TagSupport,覆盖doEndTag()方法
3、修改web.xml文件
在web.xml中<web-app>下添加,将标签的uri与具体标签描述文件绑定
4、在页面中使用标签
首先在页面中导入标签
<%@ taglib uri="/mytitle.tld" prefix="dada"%>
该句表示标签前缀为“dada”的标签将调用uri指定的标签,uri可以随便起名字,但一定要可web.xml中定义的uri相对应。
然后就可以在页面中使用了
标签的运行方式是:
JSP页面解析中发现自定义标签,则到上面的标签说明中寻找:如
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
准备工作 :首先在WEB-INF/lib下添加taglibs-log.jar包
1、创建标签描述文件
在WEB-INF下新建一个tld文件,该文件描述了此tld文件将由那个处理类完成操作,并且定义了该标签的属性。一个<taglib>中可以有很多个<tag>,由<name>标签名区分。
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
2、创建标签处理类
该类继承 TagSupport,覆盖doEndTag()方法
package com.derek.tags;
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import java.util.Properties;
import java.io.* ;
import javax.servlet.jsp.JspWriter;
public class TitleTag extends TagSupport {
private String begin = null ;
private String end = null ;
public TitleTag() {}
public String getBegin() {return begin;}
public void setBegin(String begin) {this.begin = begin;}
public String getEnd(){return end;}
public void setEnd(String end){this.end = end;}
public int doEndTag() throws JspException {
Properties ps = (Properties)pageContext.getAttribute("ps",pageContext.APPLICATION_SCOPE);//从上下文中取的message.properties
JspWriter jw = pageContext.getOut();
if(begin!=null&&begin.length()>0 ){
String header = ps.getProperty(begin);
System.out.println("页眉"+ begin);
try {
jw.println(header);
}catch (IOException ex) {ex.printStackTrace();}
}
if(end!=null&&end.length()>0 ){
String footer = ps.getProperty(end);
System.out.println(" 页脚"+ end);
try {
jw.println(footer);
}catch (IOException ex1) {ex1.printStackTrace();}
}
return SKIP_BODY;
}
public void release() {
super.release();
}
}
import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import java.util.Properties;
import java.io.* ;
import javax.servlet.jsp.JspWriter;
public class TitleTag extends TagSupport {
private String begin = null ;
private String end = null ;
public TitleTag() {}
public String getBegin() {return begin;}
public void setBegin(String begin) {this.begin = begin;}
public String getEnd(){return end;}
public void setEnd(String end){this.end = end;}
public int doEndTag() throws JspException {
Properties ps = (Properties)pageContext.getAttribute("ps",pageContext.APPLICATION_SCOPE);//从上下文中取的message.properties
JspWriter jw = pageContext.getOut();
if(begin!=null&&begin.length()>0 ){
String header = ps.getProperty(begin);
System.out.println("页眉"+ begin);
try {
jw.println(header);
}catch (IOException ex) {ex.printStackTrace();}
}
if(end!=null&&end.length()>0 ){
String footer = ps.getProperty(end);
System.out.println(" 页脚"+ end);
try {
jw.println(footer);
}catch (IOException ex1) {ex1.printStackTrace();}
}
return SKIP_BODY;
}
public void release() {
super.release();
}
}
3、修改web.xml文件
在web.xml中<web-app>下添加,将标签的uri与具体标签描述文件绑定
<taglib>
<taglib-uri>/mytitle.tld</taglib-uri>
<taglib-location>/WEB-INF/mytitle.tld</taglib-location>
</taglib>
<taglib-uri>/mytitle.tld</taglib-uri>
<taglib-location>/WEB-INF/mytitle.tld</taglib-location>
</taglib>
4、在页面中使用标签
首先在页面中导入标签
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
然后就可以在页面中使用了
<dada:title begin="" end="footer"/>