自定义标签 (Taglib) 续一

自定义标签  (Taglib)

     可重用的标签可处理复杂的逻辑运算和事务,或定义jsp网页的输出内容和格式


自定义标签所涉及到的接口与类的层次结构



创建客户化jsp标签的步骤

1)创建标签的处理类

       创建的标签处理类要继承javax.servlet.jsp.tagext.TagSupport 类

       或 javax.servlet.jsp.tagext.BodyTagSupport 类,

       并重写 两个重要的方法 doStartTag(),doEndTag()


2)创建标签库描述文件(格式 .tld <Tag Library Description> 其实就是一个xml文档),

       这个文件要放在WEB-INF目录下


3)在jsp文件中引入标签库,然后插入标签,例如 <hello:firstTag/>

       Servlet容器编译jsp文件时,如果遇到自定义标签就会调用这个标签的处理类


实例一

1.创建标签的处理类 MyTag.java


package com.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

//定义一个标签处理类
public class MyTag extends TagSupport{
	
	@Override
	//当遇到开始标签 该方法会得到调用
	public int doStartTag() throws JspException {
		
		try {
			//往页面中输出 hello
			this.pageContext.getOut().println("hello") ;
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		//EVAL_BODY_INCLUDE 正常执行 开始标签 与结束标签之间的内容
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	//当遇到结束标签 该方法会得到调用
	public int doEndTag() throws JspException {
		
		try {
			
			this.pageContext.getOut().println("world");
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
		//EVAL_PAGE 正常执行 结束标签之后的内容
		return EVAL_PAGE;
	}

}

注意: 1)doStartTag() 返回一个整数值,用来控制执行程序的后续流程,有两个可选值:

          EVAL_BODY_INCLUDE :正常执行 开始标签 与结束标签之间的内容

          SKIP_BODY :跳过 开始标签 与结束标签之间的内容

       2)doEndTag()返回一个整数值,用来控制执行程序的后续流程,有两个可选值:

         EVAL_PAGE : 正常执行 结束标签之后的内容

         SKIP_PAGE :跳过 结束标签之后的内容


2.创建标签库描述文件myTag.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.1</jsp-version>
   <short-name>myTag</short-name>
   <uri>/myTag</uri> <!-- 这个是 uri 而不是 url -->
   
   <tag>
       <name>firstTag</name>
       <tag-class>com.tag.MyTag</tag-class>
       <body-content>empty</body-content>
   
   </tag>


</taglib>


3。在jsp文件中引入标签库,然后插入标签

tag.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 引入标签库  , prefix 是前缀 -->
<%@ taglib uri="/myTag"  prefix="hello" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  
  <body>
    
    <hello:firstTag/>abcd
    
  </body>
</html>


JSP容器在调用doStartTag或doEndTag
   方法前,会先调用setPageContext 和
   setParent 方法,设置pageContext 和
   parent。


在doStartTag或doEndTag方法中可以通
   过getParent方法获取上层标签的处理类;
   在TagSupport类中定义了protected类型
    的pageContext成员变量,因此在标签处
   理类中可以直接访问pageContext变量。


--->>>自定义标签 续二      






























你可能感兴趣的:(html,jsp,servlet,include,library,encoding)