jsp自定义标签原理:
1、在JSP中引入标签库
<%@taglib prefix="mytag" uri="/hello"%>
2、在JSP中使用标签库
<mytag:hello></mytag:hello>
3、Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值
4、Web容器根据uri属性在web.xml找到对应的元素
5.从元素中获得对应的元素的值
6.Web容器根据元素的值从WEB-INF/目录下找到对应的.tld文件
7.从.tld文件中找到与tagname对应的元素
8.凑元素中获得对应的元素的值
9.Web容器根据元素的值创建相应的tag handle class的实例
10. Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理。
jsp自定义标签过程详解:
hellp.jsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>hello</title> </head> <body> <%@taglib prefix="mytag" uri="/hello"%> hello.jsp <mytag:hello></mytag:hello> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Williams (501) --> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <taglib> <taglib-uri>/hello</taglib-uri> <taglib-location>/WEB-INF/hello.tld</taglib-location> </taglib> </web-app>
hello.tld
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>mytag</short-name> <tag> <name>hello</name> <tag-class>com.mixian.tag.HelloWorldTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
HelloWorldTag.java
package com.mixian.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.tagext.TagSupport; public class HelloWorldTag extends TagSupport{ /** * @myTag */ private static final long serialVersionUID = -7335983837844318045L; @Override public int doEndTag() throws JspException { return EVAL_BODY_INCLUDE; } @Override public int doStartTag() throws JspException { try { pageContext.getOut().write("Hello World"); } catch (IOException ex) { throw new JspTagException("错误"); } return EVAL_PAGE; } }
主要注意的地方就是hello.tld 要放在/WEB-INF/下面