首页 > 代码库 > 【自己定义标签开发】04-简单标签库功能具体解释
【自己定义标签开发】04-简单标签库功能具体解释
我们回想一下jsp的Tag自己定义标签技术
我们的SimpleTag接口能够实现左边3种接口的功能。
着手使用SimpleTag来实现这个<zyg2:heddin>标签。首先创建该标签类。继承了SimpleTagSupport:
接下来实现doTag()方法:
然后在WEB-INF下的lib目录中创建zygSimple.tld文件,并注冊标签:
我们重新启动Webproject,測试页面:
这是能够看到标签体内容的。
重新启动Web项目測试,訪问后发现信息不见了:
简单Tag就是那么简单o(^▽^)o
2.用简单标签迭代标签体
我们让“嘻嘻嘻。好犀利(*^__^*)”运行5遍
然后创建并标签类:
然后在zygSimple.tld中注冊这个标签:
重新启动Webproject測试:
測试成功。
3.用简单标签改动标签体
让标签体文字变大写:
以下来实现<zyg2:upper>标签。
然后在zygSimple.tld中注冊这个标签:
重新启动Webproject測试:
測试成功!
4.用简单标签控制jsp页面的显示
前端标签效果:
以下来实现<zyg2:heddinPage/>标签。
然后在zygSimple.tld中注冊这个标签:
重新启动Webproject測试:
能够看到</head>之后的代码没有显示,測试成功!
最后总结一下简单标签的运行流程:
我们的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
【自己定义标签开发】04-简单标签库功能具体解释
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。