自定义标签库

1

package tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

public class ViewIPTag implements Tag{
	
	private PageContext pageContext ;
	/**
	 * WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
	 */
	@Override
	public int doEndTag() throws JspException {
		System.out.println(this.getClass().toString()+"标签初始化");
		return 0;
	}
	/**
	 * 调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
	 */
	@Override
	public int doStartTag() throws JspException {
		System.out.println(this.getClass().toString()+":执行doStartTag");
		HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
		JspWriter out= pageContext.getOut();
		String str = req.getRemoteAddr()+"";
		try {
			out.write(new String(str.getBytes(),"utf-8"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public Tag getParent() {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。
	 */
	@Override
	public void release() {
		System.out.println(this.getClass().toString()+":执行release()");
		
	}

	/**
	 *  JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
	 */
	@Override
	public void setPageContext(PageContext pageContext) {
		// TODO Auto-generated method stub
		System.out.println(this.getClass().toString()+":setPageContext"+pageContext.toString());
		this.pageContext = pageContext;
		
	}
	/**
	 * setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
	 */
	@Override
	public void setParent(Tag arg0) {
		// TODO Auto-generated method stub
		
	}

}

2

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    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"
    version="2.0">
      <!-- description用来添加对taglib(标签库)的描述 -->
    <description>孤傲苍狼开发的自定义标签库</description>
    <!--taglib(标签库)的版本号 -->
    <tlib-version>1.0</tlib-version>
    <short-name>MyTagLibrary</short-name>
    <!-- 
	      为自定义标签库设置一个uri,uri以/开头,/后面的内容随便写,如这里的/my ,
	        在Jsp页面中引用标签库时,需要通过uri找到标签库
	        在Jsp页面中就要这样引入标签库:<%@taglib uri="/my" prefix="my"%>
    -->
    <uri>/my</uri>
    <!--一个taglib(标签库)中包含多个自定义标签,每一个自定义标签使用一个tag标记来描述  -->
    <!-- 一个tag标记对应一个自定义标签 -->
     <tag>
        <description>这个标签的作用是用来输出客户端的IP地址</description>
    <!-- 
           为标签处理器类配一个标签名,在Jsp页面中使用标签时是通过标签名来找到要调用的标签处理器类的
           通过viewIP就能找到对应的tag.ViewIPTag类
     -->
        <name>viewIP</name>
        <!-- 标签对应的处理器类-->
        <tag-class>tag.ViewIPTag</tag-class>
        <body-content>empty</body-content>
    </tag>
    
</taglib>
    

3

原文地址:https://www.cnblogs.com/humi/p/7827994.html