隨筆-295  評(píng)論-26  文章-1  trackbacks-0

          1?TagSupport與BodyTagSupport的區(qū)別

          ?TagSupport與BodyTagSupport的區(qū)別主要是標(biāo)簽處理類是否需要與標(biāo)簽體交互,如果不需要交互的就用TagSupport,否則如果不需要交互就用BodyTagSupport。

          ?????交互就是標(biāo)簽處理類是否要讀取標(biāo)簽體的內(nèi)容和改變標(biāo)簽體返回的內(nèi)容。

          ????用TagSupport實(shí)現(xiàn)的標(biāo)簽,都可以用BodyTagSupport來實(shí)現(xiàn),因?yàn)锽odyTagSupport繼承了TagSupport。

          ?2?doStartTag(),doEndTag()

          ???doStartTag()方法是遇到標(biāo)簽開始時(shí)會(huì)呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE與SKIP_BODY,前者表示將顯示標(biāo)簽間的文字,后者表示不顯示標(biāo)簽間的文字;doEndTag()方法是在遇到標(biāo)簽結(jié)束時(shí)呼叫的方法,其合法的返回值是EVAL_PAGE與?SKIP_PAGE,前者表示處理完標(biāo)簽后繼續(xù)執(zhí)行以下的JSP網(wǎng)頁,后者是表示不處理接下來的JSP網(wǎng)頁

          ????doAfterBody(),這個(gè)方法是在顯示完標(biāo)簽間文字之后呼叫的,其返回值有EVAL_BODY_AGAIN與SKIP_BODY,前者會(huì)再顯示一次標(biāo)簽間的文字,后者則繼續(xù)執(zhí)行標(biāo)簽處理的下一步。

          ???預(yù)定的處理順序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.

          ??如果繼承了TagSupport之后,如果沒有改寫任何的方法,標(biāo)簽處理的執(zhí)行順序是:

          ???doStartTag()?->不顯示文字?->doEndTag()->執(zhí)行接下來的網(wǎng)頁

          ??如果您改寫了doStartTag(),則必須指定返回值,如果指定了EVAL_BODY_INCLUDE,則執(zhí)行順序是

          ???doStartTag()->顯示文字->doAfterBodyTag()->doEndTag()->執(zhí)行下面的網(wǎng)頁

          ?

          下面這個(gè)程式簡(jiǎn)單的示範(fàn)如何使用自訂標(biāo)籤來對(duì)網(wǎng)頁內(nèi)容作一些保護(hù):

          ????*?GuardTag.java

          package?onlyfun.caterpillar;?

          ?

          import?java.io.*;?

          import?javax.servlet.jsp.*;?

          import?javax.servlet.jsp.tagext.*;?

          ?

          public?class?GuardTag?extends?TagSupport?{?

          ????public?int?doStartTag()?throws?JspException?{?

          ????????String?valid?=?

          ????????????pageContext.getRequest().getParameter("valid");?

          ?

          ????????//?如果flag設(shè)定為key,就顯示本體文字內(nèi)容?

          ????????if(valid.equals("valid_user"))?{?

          ????????????return?EVAL_BODY_INCLUDE;?

          ????????}?

          ?

          ????????return?SKIP_BODY;?

          ????}?

          }?


          同樣的,程式編譯完之後,放置在WEB-INF/classes/之下,然後編譯.tld檔案,如下:

          ????*?guardtag.tld

          <?xml?version="1.0"?encoding="UTF-8"??>?

          ?

          <taglib?xmlns="

          ????xmlns:xsi="


          ????xsi:schemaLocation="
          http://java.sun.com/xml/ns/j2ee

          ????????????????????????web-jsptaglibrary_2_0.xsd"?

          ????version="2.0">?

          ????

          ????<description>Tag?Demo</description>?

          ????<tlib-version>1.0</tlib-version>?

          ????<jsp-version>2.0</jsp-version>?

          ????<short-name>TagDemo</short-name>?

          ????<uri>/TagDemo</uri>?


          ????<tag>?

          ????????<description>Cuard?BodyText</description>?

          ????????<name>guard</name>?

          ????????<tag-class>onlyfun.caterpillar.GuardTag</tag-class>?

          ????????<body-content>JSP</body-content>?

          ????</tag>?


          </taglib>?


          在<body-content>中設(shè)定的是JSP,這表示如果本體中包括JSP網(wǎng)頁的內(nèi)容,將會(huì)被編譯執(zhí)行,接下來您可以在web.xml中定義uri與.tld的名稱對(duì)應(yīng)關(guān)係,方法與前一個(gè)主題相同,這邊就不重複說明了,然後撰寫一個(gè)測(cè)試的JSP網(wǎng)頁:

          ????*?test.jsp

          <%@taglib?prefix="caterpillar"?

          ???????????uri="

          <html>?

          <body>?

          ????這個(gè)網(wǎng)頁包括受保護(hù)的內(nèi)容OOOXXXX。。。。。。<p>?

          ????<caterpillar:guard>?

          ????????${?param.user?},?您好,幸運(yùn)密碼是?oooxxx?!?

          ????</caterpillar:guard>?

          </body>?

          </html>?


          為了要能看到幸運(yùn)密碼,您必須在請(qǐng)求中包括guard參數(shù),假設(shè)請(qǐng)求是:
          http://localhost:8080/myjsp/test.jsp?valid=valid_user&user=Justin


          這樣就可以看到幸運(yùn)密碼了:
          <html>

          <body>

          ????這個(gè)網(wǎng)頁包括受包護(hù)的內(nèi)容OOOXXXX。。。。。。<p>

          ???

          ????????Justin,?您好,幸運(yùn)密碼是:?oooxxx?!

          ???

          </body>
          </html>



          大盤預(yù)測(cè) 國富論
          posted on 2007-09-11 10:09 華夢(mèng)行 閱讀(725) 評(píng)論(1)  編輯  收藏

          評(píng)論:
          # re: java 標(biāo)簽處理[未登錄] 2013-09-03 16:18 | wangfeng

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 天津市| 金川县| 陆河县| 江阴市| 布尔津县| 芦山县| 鸡泽县| 恩平市| 玉树县| 防城港市| 偏关县| 当阳市| 白水县| 称多县| 教育| 贡山| 辉南县| 金湖县| 铜山县| 伊春市| 游戏| 武清区| 萨迦县| 中江县| 德州市| 定远县| 南皮县| 彰化市| 会同县| 根河市| 壤塘县| 普陀区| 贵州省| 迁西县| 鹤峰县| 富平县| 玛曲县| 翁牛特旗| 广丰县| 古蔺县| 武胜县|