隨筆-295  評論-26  文章-1  trackbacks-0

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

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

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

          ????用TagSupport實現(xiàn)的標簽,都可以用BodyTagSupport來實現(xiàn),因為BodyTagSupport繼承了TagSupport。

          ?2?doStartTag(),doEndTag()

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

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

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

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

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

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

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

          ?

          下面這個程式簡單的示範如何使用自訂標籤來對網(wǎng)頁內(nèi)容作一些保護:

          ????*?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)容,將會被編譯執(zhí)行,接下來您可以在web.xml中定義uri與.tld的名稱對應(yīng)關(guān)係,方法與前一個主題相同,這邊就不重複說明了,然後撰寫一個測試的JSP網(wǎng)頁:

          ????*?test.jsp

          <%@taglib?prefix="caterpillar"?

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

          <html>?

          <body>?

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

          ????<caterpillar:guard>?

          ????????${?param.user?},?您好,幸運密碼是?oooxxx?!?

          ????</caterpillar:guard>?

          </body>?

          </html>?


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


          這樣就可以看到幸運密碼了:
          <html>

          <body>

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

          ???

          ????????Justin,?您好,幸運密碼是:?oooxxx?!

          ???

          </body>
          </html>



          大盤預(yù)測 國富論
          posted on 2007-09-11 10:09 華夢行 閱讀(734) 評論(1)  編輯  收藏

          評論:
          # re: java 標簽處理[未登錄] 2013-09-03 16:18 | wangfeng

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汝阳县| 临洮县| 深水埗区| 寿宁县| 巫山县| 饶河县| 玉田县| 七台河市| 通城县| 峨眉山市| 珲春市| 綦江县| 贵州省| 冀州市| 司法| 偏关县| 紫云| 浑源县| 保亭| 镇康县| 盐亭县| 石屏县| 井研县| 铜山县| 健康| 资中县| 盐山县| 盐边县| 清苑县| 凭祥市| 沙田区| 集贤县| 丹凤县| 平阳县| 沁阳市| 自贡市| 理塘县| 灵武市| 合作市| 公主岭市| 鸡东县|