【自己定義標簽開發】04-簡單標簽庫功能具體解釋
阿新 • • 發佈:2017-08-10
xtend 循環 輸出標簽 都是 sim 目錄 article abc ng-
我們回想一下jsp的Tag自己定義標簽技術
我們的SimpleTag接口能夠實現左邊3種接口的功能。
我們以下舉一些樣例來測試。
1.隱藏頁面信息
我們仍然要借助標簽來隱藏我們的頁面信息:
著手使用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"%> <[email protected] 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"%> <[email protected] 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"%> <[email protected] 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"%> <[email protected] 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-簡單標簽庫功能具體解釋