zoukankan      html  css  js  c++  java
  • 自定义标签库

    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

  • 相关阅读:
    [翻译] .NET 官宣跨平台 UI 框架 MAUI
    手写一个简易的多周期 MIPS CPU
    介绍一个基于 .NET 的船新 PHP SDK + Runtime: PeachPie
    C# 9 新特性:代码生成器、编译时反射
    .NET 5 中的正则引擎性能改进(翻译)
    你所不知道的 C# 中的细节
    拿 C# 搞函数式编程
    从未来看 C#
    直接使用汇编编写 .NET Standard 库
    用 F# 手写 TypeScript 转 C# 类型绑定生成器
  • 原文地址:https://www.cnblogs.com/humi/p/7827994.html
Copyright © 2011-2022 走看看