• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        servlet2.3(續)

        servlet2.3(續)

        更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

        標記庫
        新的規范中幾個有關標記庫的概念得到了澄清,而且規范的許多地方作了整理。對于標記庫,新的規范還有一個重要的補充——迭代(iterator)標記。在當前的JSP 1.1規范中,如果標記要執行“循環”它就必須是一個BodyTag。然而,標記可能不必處理它的標記體,定義BodyTag導致容器生成效率低下的代碼(setBodyContent()和其他一些方法仍將被調用)。為解決這個問題,JSP 1.2引入了迭代標記。

        JSP 1.2規范引入了兩個新的常量,即EVAL_BODY_BUFFERED和EVAL_BODY_AGAIN。EVAL_BODY_BUFFERED作為一個具有更明確含義的名字取代EVAL_BODY_TAG,兩者的值是一樣的。它意味著以前編寫的代碼仍舊可以運行。另外,它也意味著現在實現doStartTag()時應該返回EVAL_BODY_BUFFERED而不是EVAL_BODY_TAG。

        EVAL_BODY_AGAIN也有與EVAL_BODY_BUFFERED同樣的值,但它的名字同樣具有更明確的含義。當標記想要讓容器迭代(即反復執行)它的標記體時doAfterBody()方法應該返回這個值。

        javax.servlet.jsp.IterationTag是JSP 1.2規范定義的新接口,要定義迭代行為就必須實現這個接口。IterationTag接口擴展SimpleTag并增加了一個doAfterBody()方法,BodyTag現在從IterationTag而不是SimpleTag繼承。

        實現迭代時,在BodyTag或者IterationTag中,doAfterBody()方法應該返回EVAL_BODY_AGAIN以強制容器再次執行標記,返回SKIP_BODY則終止迭代。為IterationTag編寫的代碼很簡單,如Listing 5所示。


        【Listing 5】

        public class SimpleIterator extends TagSupport implements IterationTag {
        int loopCount;
        }
        public void setLoopCount(int loopCount) {
        this.loopCount = loopCount;
        }

        public int doStartTag() {
        return EVAL_BODY_INCLUDE;
        }

        public int doAfterBody() {
        while(--loopCount > 0) return EVAL_BODY_AGAIN;
        return SKIP_BODY;
        }
        }

          doStartTag()返回EVAL_BODY_INCLUDE,doAfterBody()返回EVAL_BODY_AGAIN以實現迭代,迭代完成時則返回SKIP_BODY。注意當前還沒有與TagSupport、BodyTagSupport相配的IterationTagSupport類,不過這并不會真正帶來什么麻煩。

          標記庫的當前版本支持非常有限的合法性檢驗機制。TagExtraInfo類里面可以定義一個isValid方法,這個方法在頁面編譯的時候被調用,你可以用它檢查屬性名字、值、類型等。JSP 1.2規范提供了更強大的合法性檢驗機制。你可以定義一個檢驗器類,在它里面定義一個方法,這個方法通過參數得到包含標記庫內一個或者多個標記的整個頁面的XML描述,參見Listing 6的實例。這個方法在編譯頁面的時候被調用(它是一次性的調用。也就是說,你只付出一次調用的代價,而不是每次用戶請求頁面的時候都要調用)。


        【Listing 6】

        public class SimpleIteratorValidator extends TagLibraryValidator {

        public String validate( String prefix, String uri, PageData page) {
        java.io.InputStream is = page.getInputStream();
        boolean b = validateJSP(is);

        // 一切正常
        if(b) return null;
         else return "Some Validation Error";
        }
        }

        Listing 6的檢驗器擴展了javax.servlet.jsp.tagext.TagLibraryValidator,而且它覆蓋了validate()。validate()方法的參數中傳入了待檢驗標記的前綴以及相關的URI。第三個參數PageData允許你訪問一個InputStream,這個InputStream包含XML格式的JSP頁面。如果一切正常,validate方法返回null;如果檢驗不能通過,則它返回一個錯誤字符串。注意這是一個在頁面編譯時出現的錯誤,它只可能在開發階段出現。

        新的規范還涉及了其他一些問題。例如,JSP 1.2規范最終將定義一個JSP頁面的XML描述。JSP頁面的XML描述不僅對合法性檢驗很有用(如上面例子所示),而且對于工具軟件供應商來說也很有用,因為它簡化了JSP編輯器的開發。

        新的JSP規范還允許我們把監聽器定義成標記,而不是本文前面所出現的獨立的類。JSP規范現在包含了一章關于本地化的內容,例如,它定義了為頁面指定字符編碼(Encoding)方式的能力。

        新的規范中還加入了一個TryCatchFinally接口。這個接口允許標記在出現意料不到的異常時更好地進行資源清理工作。

        JSP 1.2和Servlet 2.3規范實現了兩個目標。它們澄清了當前規范中容易混淆的幾個問題,增加了一些開發者需要的新功能。主要的變化包括監聽器、過濾器以及經過修改的標記庫模型。新的規范放在http://java.sun.com/aboutJava/communityprocess/first/jsr053/index.html供任何人閱讀和評議,你不妨找來一讀,看看它是否能夠使你的工作更加輕松、簡單。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲人成伊人成综合网久久久 | 一区二区三区四区免费视频 | 亚洲AV蜜桃永久无码精品| 野花香在线视频免费观看大全| 色窝窝亚洲av网| 亚洲高清一区二区三区| 久久久亚洲欧洲日产国码是AV| 亚洲 综合 国产 欧洲 丝袜| 四虎永久免费地址在线网站| 精品香蕉在线观看免费| 无码精品A∨在线观看免费| a级毛片视频免费观看| 黄桃AV无码免费一区二区三区| 亚洲爆乳AAA无码专区| 亚洲人成色777777老人头| 亚洲色丰满少妇高潮18p| 亚洲第一男人天堂| jzzijzzij在线观看亚洲熟妇| 亚洲国产午夜精品理论片在线播放 | 在线jyzzjyzz免费视频| 亚洲免费综合色在线视频| 最新中文字幕电影免费观看| 影音先锋在线免费观看| 永久黄网站色视频免费观看| 国产一卡二卡3卡四卡免费| 免费萌白酱国产一区二区三区| 免费视频精品一区二区三区| 久久午夜夜伦鲁鲁片免费无码| 成人免费黄色网址| 亚洲 综合 国产 欧洲 丝袜| 亚洲区不卡顿区在线观看| 亚洲一级二级三级不卡| 亚洲成a人片在线不卡一二三区| 亚洲高清免费视频| 拨牐拨牐x8免费| 亚洲乱码精品久久久久..| 久久精品国产亚洲AV蜜臀色欲| 特级毛片免费观看视频| 久久国内免费视频| 久久夜色精品国产亚洲| 偷自拍亚洲视频在线观看99|