日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

servlet2.3(續(xù))

servlet2.3(續(xù))

更新時間:2022-05-01 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

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

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

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

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

實現(xiàn)迭代時,在BodyTag或者IterationTag中,doAfterBody()方法應(yīng)該返回EVAL_BODY_AGAIN以強制容器再次執(zhí)行標記,返回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以實現(xiàn)迭代,迭代完成時則返回SKIP_BODY。注意當前還沒有與TagSupport、BodyTagSupport相配的IterationTagSupport類,不過這并不會真正帶來什么麻煩。

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


【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()方法的參數(shù)中傳入了待檢驗標記的前綴以及相關(guān)的URI。第三個參數(shù)PageData允許你訪問一個InputStream,這個InputStream包含XML格式的JSP頁面。如果一切正常,validate方法返回null;如果檢驗不能通過,則它返回一個錯誤字符串。注意這是一個在頁面編譯時出現(xiàn)的錯誤,它只可能在開發(fā)階段出現(xiàn)。

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

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

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

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

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

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 男人边吃奶摸下激烈免费视频 | 日韩3级| 最近高清中文字幕大全免费1 | 青青草国产精品久久 | 中文字幕在线观看免费视频 | a亚洲欧美中文日韩在线v日本 | 国产臀控福利视频在线 | 久久综合久久综合九色 | 欧美亚洲在线 | 日日久 | 免费亚洲视频在线观看 | 中文字幕免费在线观看 | 国产福利毛片 | 日日麻批视频 | 日本高清毛片视频在线看 | 热99这里有精品综合久久 | 欧美日韩永久久一区二区三区 | 久久99精品久久久久久秒播 | 色老板路线 | 91精品国产高清在线入口 | 国产亚洲一区二区精品 | 激情五月色婷婷色综合 | 欧美变态杂交xxxx | 4480yy私人影院高清不卡 | 黑人与亚洲女人做爰magnet | 日韩精品视频免费在线观看 | 成人嫩草研究院永久网址 | 亚洲另类 专区 欧美 制服 | 色婷婷久久综合中文久久一本 | 成人欧美一区二区三区视频不卡 | 五月天婷婷在线视频 | 欧美日韩国产成人精品 | 欧美成人精品第一区二区三区 | 久久99久久99精品免观看动漫 | 亚洲一区二区成人 | 婷婷丁香色综合图亚洲 | 天天色天天做 | 久久这里只有精品视频99 | 无遮挡一级毛片视频 | 碰碰碰在线观看免费视频 | 波多野结衣3女同在线观看 波多野结衣aⅴ在线 |