亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP自定義標簽-標簽屬性_動力節點Java學院整理

2024-09-05 00:23:14
字體:
來源:轉載
供稿:網友

對自定義標簽添加一些屬性,可以使我們的標簽功能更加靈活和復用。例如前一篇博客使用簡單標簽來對標簽體內容執行一定的次數,就無法在標簽上規定要執行的次數,必須在標簽處理器類中修改,很不方便,如果使用帶屬性的標簽就能很好的解決這個問題。

  要想使簡單標簽具有屬性,通常需要滿足以下兩個步驟:

 ?、?在標簽處理器類中定義屬性,同時為每個屬性生成setter方法;

  ② 在TLD文件中對于的<tag>標簽下添加屬性的<attribute>標簽,同時<attribute>標簽下定義其從標簽,其中<name>從標簽是必須要有的。<attribute>標簽所擁有的從標簽如下:  

jsp,自定義標簽,標簽屬性

  name標簽:用于指定標簽中屬性的名稱。

  required標簽:指定該屬性是否必須。

  rtexprvalue標簽:指定該屬性是否支持運行時表達式,如JSP表達式(<%=value  %>)和EL表達式( ${value} )。如果我們設定為“false”的話,那么該屬性只能支持字符串。 

例1:使用簡單標簽來控制標簽體內容執行次數(帶屬性標簽方式)
編寫標簽處理器類:

 package com.bjpowernode.simpletag; public class LoopTagBody extends SimpleTagSupport {   private int count; //定義一個屬性,用來指定循環次數   public void setCount(int count) {  //為該屬性設置setter方法     this.count = count;   }   @Override   public void doTag() throws JspException, IOException {       JspFragment fragment = this.getJspBody();     for(int i=0;i<this.count;i++) {  //使用屬性就可以指定循環次數       fragment.invoke(null);     }   }   }  

 在TLD文件中定義和描述標簽處理器類,同時指定標簽所在的uri:

<?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>A tag library exercising SimpleTag handlers.</description>   <tlib-version>1.0</tlib-version>   <short-name>SimpleTagLibrary</short-name> <uri>simpletag</uri>   <tag>     <name>loopbody</name>     <tag-class>com.bjpowernode.simpletag.LoopTagBody</tag-class>     <body-content>scriptless</body-content>     <attribute>       <name>count</name>       <required>true</required>       <rtexprvalue>true</rtexprvalue>     </attribute>   </tag> </taglib>

  在JSP頁面的開頭導入taglib指令:

  <%@ taglib uri="simpletag" prefix="simple" %>

最后就能在JSP頁面的主體中使用剛才定義好的帶屬性的簡單標簽了,使用“count”屬性就能指定標簽體循環的次數:

 <simple:loopbody count="5">       神樂! <br>   </simple:loopbody>

在瀏覽器中觀察: 

jsp,自定義標簽,標簽屬性 

  通過上面的例子我們也可以看到,雖然“count”屬性在標簽處理器LoopTagBody類中的類型為int整型,但是在標簽上傳入的是字符串類型,這是因為JSP容器支持將標簽的屬性類型(字符串)轉換為八大基本數據類型。如果在標簽處理器類中定義一個非八大基本數據類型的屬性,那么上面的以上面的方式必定要報錯,因為JSP容器無法將字符串轉換為其它類型。除非在標簽屬性中使用其它類型:

例2:

 package com.bjpowernode.simpletag; public class DateAttributeTag extends SimpleTagSupport {   private Date date;    public void setDate(Date date) {     this.date = date;   }   @Override   public void doTag() throws JspException, IOException {     this.getJspContext().getOut().write(date.toString());   } }

在TLD文件中描述(這里省略首尾,詳細內容請看例1):

<tag> <name>showtime</name>    <tag-class>com.bjpowernode.simpletag.DateAttributeTag</tag-class>   <body-content>empty</body-content>   <attribute>       <name>date</name>       <required>true</required>       <rtexprvalue>true</rtexprvalue> </attribute> </tag>

注:這里<rtexprvalue>標簽是必須要的。

在JSP頁面中導入taglib指令(此處略)后,在JSP頁面的主體中使用剛才定義的簡單標簽:

  <simple:showtime date="<%=new Date() %>"/>

在瀏覽器中觀察:  

jsp,自定義標簽,標簽屬性

  因為在JSP頁面屬性上若以字符串,則因為在標簽處理器類并非八大基本數據類型,因此只能使用JSP表達式或EL表達式將對象傳入,因此必須在TLD文件中將<rtexprvalue>標簽設置為“true”。 

簡單標簽的應用,包括無屬性的和帶屬性的標簽如何使用都已經學習完畢,內容就這么多,剩下的就可以根據所學的進行開發了。

例3:使用簡單標簽來防盜鏈

  如果某個JSP頁面需要防止被別的網站盜鏈,可以在該JSP頁面的最開始部分使用一個簡單標簽,添加一些屬性如指定從哪過來的網站才可以瀏覽本頁面內容,指定如果是非指定網址過來的鏈接應該先讓請求跳到哪里去。

編寫標簽處理器類:

 package com.bjpowernode.simpletag; public class RefererTag extends SimpleTagSupport {   private String site; //指定允許來訪請求的網址   private String location;    //若非指定來訪請求的網址應該先跳轉到哪里去      public void setSite(String site) {     this.site = site;   }   public void setLocation(String location) {     this.location = location;   }   @Override   public void doTag() throws JspException, IOException {     PageContext pageContext = (PageContext) this.getJspContext();     HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();     HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();          String requestUrl = request.getHeader("referer");          if(requestUrl==null || !requestUrl.startsWith(site)) {       response.sendRedirect(request.getContextPath()+this.location);       throw new SkipPageException();     }   } }

在TLD文件中描述(這里省略首尾,詳細內容請看例1):

 <tag>     <name>referer</name>     <tag-class>com.bjpowernode.simpletag.RefererTag</tag-class>     <body-content>empty</body-content>     <attribute>       <name>site</name>       <required>true</required>       <rtexprvalue>true</rtexprvalue>     </attribute>     <attribute>       <name>location</name>       <required>true</required>       <rtexprvalue>true</rtexprvalue>     </attribute> </tag>

在JSP頁面中導入taglib指令(此處略)后,在JSP頁面的主體中使用剛才定義的簡單標簽:

 <simple:referer site="http://www.bjpowernode.com" location="/index.jsp" /> <!DOCTYPE HTML> <html>  <head>  <title>My JSP 'simpletagdemo.jsp' starting page</title>  </head>  。。。 </html>

  結果:若想訪問該JSP頁面,只有滿足請求的URL前綴為page屬性指定的網址才能訪問,如果是別的web中的超鏈接或者直接在瀏覽器中輸入該JSP的URL,都會被跳轉到location屬性指定的網頁。 

例4:使用簡單標簽將標簽體中的HTML過濾轉義

編寫標簽處理器類:

 package com.bjpowernode.simpletag; public class HtmlFilterTag extends SimpleTagSupport {   @Override   public void doTag() throws JspException, IOException {     JspFragment fragment = this.getJspBody();     StringWriter writer = new StringWriter();     fragment.invoke(writer);     StringBuffer buffer = writer.getBuffer();     String content = filter(buffer.toString());     this.getJspContext().getOut().write(content);   }   public String filter(String message) {     if (message == null)       return (null);     char content[] = new char[message.length()];     message.getChars(0, message.length(), content, 0);     StringBuilder result = new StringBuilder(content.length + 50);     for (int i = 0; i < content.length; i++) {       switch (content[i]) {       case '<':         result.append("<");         break;       case '>':         result.append(">");         break;       case '&':         result.append("&");         break;       case '"':         result.append(""");         break;       default:         result.append(content[i]);       }     }     return (result.toString());   } }

  其中過濾方法filter方法可以在Tomcat中參考代碼(位置:【Tomcat】--->【webapps】--->【examples】--->【WEB-INF】--->【classes】--->【utils】--->“HTMLFilter.java”)。
在TLD文件中定義和描述標簽:

 <tag>     <name>filterhtml</name>     <tag-class>com.bjpowernode.simpletag.HtmlFilterTag</tag-class>     <body-content>scriptless</body-content>  </tag>

在JSP頁面中的主體部分中使用剛才自定義的簡單標簽:

 <simple:filterhtml>    <a href="www.baidu.com" rel="external nofollow" >百度</a>   </simple:filterhtml>

瀏覽器中觀察:

jsp,自定義標簽,標簽屬性


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成网站色ww在线| 亚洲电影免费观看高清| 中文字幕日韩在线观看| 欧美激情奇米色| 欧美丝袜一区二区| 亚洲黄色在线观看| 国产女精品视频网站免费| 中文字幕国内精品| 日韩精品在线观看一区| 亚洲老司机av| 国产精品女人网站| 久久久久日韩精品久久久男男| 欧美裸体xxxx极品少妇| 亚洲成人999| 精品福利一区二区| 91免费看国产| 国产国产精品人在线视| 亚洲精品国产综合久久| 亚洲va欧美va国产综合剧情| 疯狂蹂躏欧美一区二区精品| 精品久久久av| 亚洲欧美日韩爽爽影院| 欧美日韩美女在线观看| 日韩中文字幕国产精品| 亚洲女同精品视频| 中文字幕亚洲欧美日韩2019| 在线精品91av| 中文字幕在线成人| 久久亚洲春色中文字幕| 最近免费中文字幕视频2019| 美女久久久久久久久久久| 国产亚洲精品久久久| 成人有码在线播放| 国产精品99久久99久久久二8| 久久亚洲精品国产亚洲老地址| 91免费综合在线| 国产成人精品av| 国语自产精品视频在线看抢先版图片| 精品中文字幕乱| 国产欧美精品一区二区| 国产日韩在线视频| 欧美电影免费观看网站| 精品久久久久久久久久久久| 在线一区二区日韩| 91精品在线一区| 中文字幕亚洲欧美一区二区三区| 国产女人18毛片水18精品| 一本大道亚洲视频| 日韩精品视频免费专区在线播放| 性色av一区二区三区红粉影视| 国产精品伦子伦免费视频| 亚洲深夜福利网站| 午夜精品视频网站| 国产成人精品电影久久久| 国产一区玩具在线观看| 久久精品视频在线播放| 欧美亚洲成人xxx| 国产亚洲精品美女| 亚洲国产精品久久| 清纯唯美日韩制服另类| 国产日韩欧美夫妻视频在线观看| 国产精品狼人色视频一区| yellow中文字幕久久| 亚洲国产欧美一区二区三区同亚洲| 久久久久在线观看| 亚洲人精选亚洲人成在线| 久久av中文字幕| 亚洲免费成人av电影| 成人免费在线视频网站| 亚洲影院色在线观看免费| 亚洲日本欧美日韩高观看| 亚洲а∨天堂久久精品9966| 青青草国产精品一区二区| 久久久国产精品视频| 亚洲精品久久久久久久久久久久| 这里只有精品丝袜| 成人福利在线观看| 亚洲精品国产精品乱码不99按摩| 亚洲理论电影网| 日韩欧美成人免费视频| 日本亚洲欧洲色α| www.xxxx欧美| 亚洲bt天天射| 欧美日韩高清区| 最近2019中文字幕大全第二页| 久热99视频在线观看| 美女少妇精品视频| 91精品国产91久久久久久| 92国产精品久久久久首页| 国产欧美韩国高清| 国产不卡一区二区在线播放| 亚洲热线99精品视频| 日韩毛片中文字幕| 九九久久综合网站| 国产精品美女午夜av| 亚洲天堂男人天堂| 久久精品国产一区二区电影| 国产精品香蕉在线观看| 国产99久久精品一区二区永久免费| 日本国产精品视频| 亚洲欧洲午夜一线一品| 国产亚洲精品久久久久久777| 黄色一区二区三区| 在线视频免费一区二区| 久久久久久九九九| 欧美网站在线观看| 日韩av免费看网站| 亚洲人成网站999久久久综合| 91久久久久久国产精品| 亚洲乱码av中文一区二区| 亚洲成人av资源网| 日韩欧美精品网址| 精品日本高清在线播放| 亚洲精品按摩视频| 69精品小视频| 庆余年2免费日韩剧观看大牛| 欧美一区二区三区免费视| 亚洲人成电影在线观看天堂色| 国产区精品视频| 久久在线视频在线| 国产午夜精品麻豆| 国产97在线|亚洲| 日韩欧美国产免费播放| 国产久一一精品| 欧美高清电影在线看| 久久久久久久久久久av| 国产精品福利在线观看| 伊人伊成久久人综合网小说| 日韩大胆人体377p| 色诱女教师一区二区三区| 奇米影视亚洲狠狠色| 国产精品青青在线观看爽香蕉| 亚洲va电影大全| 欧美专区中文字幕| 国产欧美一区二区三区久久人妖| 久久精品国产v日韩v亚洲| 久久久久久久影院| 久久不射电影网| 亚洲精选在线观看| 久久久久久久久久久人体| 欧美俄罗斯乱妇| 国产精品午夜一区二区欲梦| 亚洲国产天堂网精品网站| 久久躁日日躁aaaaxxxx| 国产成人激情小视频| 欧美黄色片免费观看| 欧美精品在线视频观看| 欧美裸体xxxx| 欧美自拍大量在线观看| 亚洲一区二区三区在线免费观看| 国产视频丨精品|在线观看| 日韩中文字幕在线免费观看| 国产精品中文字幕在线| 国产精品久久久久久久久久99| 久久69精品久久久久久国产越南| 欧美性猛交xxxx乱大交蜜桃| 久久久女女女女999久久| 国内揄拍国内精品少妇国语| 国产欧美在线观看| 97色在线视频| 国产精品亚洲第一区| 国产视频久久久久久久| 国产成人av网| 久久免费国产视频|