zoukankan      html  css  js  c++  java
  • 【自己定义标签开发】04-简单标签库功能具体解释

    我们回想一下jsp的Tag自己定义标签技术


    我们的SimpleTag接口能够实现左边3种接口的功能。


    这个接口的默认实现类是SimpleSupport。

    接口中的方法有:
    doTag()//标签開始和结束都是在这种方法中定义。标签体是setJspBody方法中的JspFragment对象。
    能够抛出SkipPageException。就相当于返回了“SKIP_PAGE”。余下的jsp内容就不再运行了。



    getParent()//得到父标签对象

    setJspBody(JspFragment jspBody)//server在调用你的标签前。会将标签作为一个JspFragment对象传送过来。

    setJspContext(JspContext pc)//获得JspContext(JspContext继承了PageContext)

    setParent()//设置父标签对象


    我们以下举一些样例来測试。
    1.隐藏页面信息
    我们仍然要借助标签来隐藏我们的页面信息:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>用简单标签控制是否运行标签体</title>
      </head>
      
      <body>
      
         <zyg2:heddin>
             Helloworld。
         </zyg2:heddin>
      </body>
      
    </html>

    着手使用SimpleTag来实现这个<zyg2:heddin>标签。首先创建该标签类。继承了SimpleTagSupport:


    接下来实现doTag()方法:
    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    //控制标签体是否运行
    public class HeddinSimpleTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();//拿到标签体对象
    		jf.invoke(this.getJspContext().getOut());//控制标签体运行:输出标签体
    
    
    	}
    }
    我们这里选择了先输出标签体。

    然后在WEB-INF下的lib目录中创建zygSimple.tld文件,并注冊标签:
    <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>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>2.0</tlib-version>
        <short-name>zyg2</short-name>
        <uri>h/simpleTag</uri><!-- 标签绑定的uri。用于引入 -->
        
        
        <tag>
            <name>heddin</name><!-- 标签名 -->
    		<tag-class>org.zyg.web.simpletag.HeddinSimpleTag</tag-class>
    		<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
        </tag>
      
    </taglib>

    我们重新启动Webproject,測试页面:

    这是能够看到标签体内容的。


    假设不想显示的话。更简单,获得标签体的时候什么也不做即可了:

    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    //控制标签体是否运行
    public class HeddinSimpleTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();//拿到标签体对象
    	}
    }

    重新启动Web项目測试,訪问后发现信息不见了:

    简单Tag就是那么简单o(^▽^)o

    2.用简单标签迭代标签体
    我们让“嘻嘻嘻。好犀利(*^__^*)”运行5遍
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>用简单标签循环标签体</title>
      </head>
      
      <body>
      
         <zyg2:repeat>
            嘻嘻嘻,好犀利(*^__^*) <br/>
         </zyg2:repeat>
      </body>
      
    </html>

    然后创建并标签类:

    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class RepeatSimpleTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();//拿到标签体对象
    		for (int i = 0; i < 5; i++) {
    			jf.invoke(this.getJspContext().getOut());
    		}
    	}
    }
    

    然后在zygSimple.tld中注冊这个标签:
    <tag>
        <name>repeat</name><!-- 标签名 -->
    	<tag-class>org.zyg.web.simpletag.RepeatSimpleTag</tag-class>
    	<body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
    </tag>

    重新启动Webproject測试:

    測试成功。

    3.用简单标签改动标签体
    让标签体文字变大写:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>用简单标签循环标签体</title>
      </head>
      
      <body>
      
         <zyg2:upper>
           	   abcdefg <br/>
         </zyg2:upper>
      </body>
      
    </html>

    以下来实现<zyg2:upper>标签。


    创建并编辑标签处理类:

    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    import java.io.StringWriter;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    //改动标签体
    public class UpperSimpleTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		JspFragment jf=this.getJspBody();//拿到标签体对象
    		StringWriter sw=new StringWriter();
    		jf.invoke(sw);//运行一个带缓冲的Writer
    		
    		String content=sw.toString();//获得标签体的内容
    		content = content.toUpperCase();//将内容变为大写
    		
    		this.getJspContext().getOut().write(content);
    	}
    	
    }

    然后在zygSimple.tld中注冊这个标签:
    <tag>
        <name>upper</name><!-- 标签名 -->
        <tag-class>org.zyg.web.simpletag.UpperSimpleTag</tag-class>
        <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
    </tag>

    重新启动Webproject測试:

    測试成功!

    4.用简单标签控制jsp页面的显示
    前端标签效果:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="/simpleTag" prefix="zyg2" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>用简单标签控制jsp页面的显示</title>
      </head>
      
      <zyg2:heddinPage/>
      
      <body> 
       
      	  Hello ! 
          
      </body>
      
    </html>

    以下来实现<zyg2:heddinPage/>标签。


    创建并编辑标签处理类:

    package org.zyg.web.simpletag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.SkipPageException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    //控制标签余下的jsp不运行
    public class HeddinPageSimpleTag extends SimpleTagSupport {
    
    	@Override
    	public void doTag() throws JspException, IOException {
    		//仅仅要这个异常抛给jsp。该标签以下的jsp代码就不会运行
    		throw new SkipPageException();
    	}
    	
    }
    

    然后在zygSimple.tld中注冊这个标签:
    <tag>
        <name>heddinPage</name><!-- 标签名 -->
        <tag-class>org.zyg.web.simpletag.HeddinPageSimpleTag</tag-class>
        <body-content>empty</body-content><!-- 有无标签体(单标签还是成对标签) -->
    </tag>

    重新启动Webproject測试:

    能够看到</head>之后的代码没有显示,測试成功!

    最后总结一下简单标签的运行流程:

    转载请注明出处:http://blog.csdn.net/acmman/article/details/51093287

  • 相关阅读:
    Android Studio使用
    VS.NET发送会议邮件程序原码
    C#中渐变色的代码实例,用于自绘菜单
    VS.NET获取某年某月的天数
    AJAX原理简要说明及实例
    ASP.NET下增加定时器功能
    VS.NET发送普通邮件原码
    保存xml到server实例
    VS.NET通过OUTLOOK发邮件
    利用IE打印的一点实例代码
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7337961.html
Copyright © 2011-2022 走看看