jsp 自定义标签

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/下面

 

 

你可能感兴趣的:(自定义标签)