真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何讀懂框架標(biāo)簽taglib的工作原理

本篇文章給大家分享的是有關(guān)如何讀懂框架標(biāo)簽taglib的工作原理,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、嘉定網(wǎng)站維護(hù)、網(wǎng)站推廣。

在Java Web應(yīng)用開發(fā)時(shí),如果不是前后端分離進(jìn)行數(shù)據(jù)交互的實(shí)現(xiàn),一般都會(huì)通過JSP、FreeMarker、Velocity之類的技術(shù)進(jìn)行頁面的渲染。而在頁面的渲染過程中,很多時(shí)候會(huì)使用到標(biāo)簽(taglib)這個(gè)技術(shù)。

比如為了控制頁面一些顯示邏輯,實(shí)現(xiàn)類似代碼里if/else這種效果,就會(huì)使用到core標(biāo)簽里的內(nèi)容,類似這樣:

如何讀懂框架標(biāo)簽taglib的工作原理

要實(shí)現(xiàn)一個(gè)容器數(shù)據(jù)的遍歷,可以直接使用core標(biāo)簽的foreach

如何讀懂框架標(biāo)簽taglib的工作原理

要實(shí)現(xiàn)頁面上數(shù)據(jù)的格式化,則可以直接使用format標(biāo)簽,進(jìn)行對應(yīng)數(shù)據(jù)的格式化展現(xiàn)。

甚至在一些MVC框架中,也都包含一些便捷的用于頁面數(shù)據(jù)渲染的標(biāo)簽,可以直接使用。例如Spring中的form標(biāo)簽就可以直接進(jìn)行數(shù)據(jù)的綁定。

那這些標(biāo)簽背后是如何工作的呢?

之前的文章里有寫過JSP的工作原理(你了解Tomcat是怎樣處理Jsp文件的嗎?),概括起來,就是會(huì)在執(zhí)行時(shí)將JSP生成Servlet文件,然后再執(zhí)行對應(yīng)的service方法,進(jìn)行請求的處理。其中涉及到使用標(biāo)簽的部分也會(huì)生成對應(yīng)的執(zhí)行邏輯。

而實(shí)際上,一個(gè)tag,對應(yīng)的是一個(gè)Java類,根據(jù)規(guī)范實(shí)現(xiàn)相應(yīng)的方法。由JSP生成的Servlet在執(zhí)行標(biāo)簽的過程中,會(huì)直接調(diào)用標(biāo)簽對應(yīng)類的指定方法,根據(jù)返回值,來進(jìn)行頁面上對應(yīng)內(nèi)容的輸出。如果是繼續(xù)則輸出內(nèi)容,如果是跳過內(nèi)容就會(huì)被忽略。基本就是這樣一個(gè)思路。

例如本文前面的 if 標(biāo)簽,對應(yīng)生成的Servlet內(nèi)容是這樣的

如何讀懂框架標(biāo)簽taglib的工作原理

再看 foreach 這個(gè)標(biāo)簽,生成的內(nèi)容是這樣的:

如何讀懂框架標(biāo)簽taglib的工作原理

我們看到,foreach 被直接轉(zhuǎn)換成了do while 循環(huán)。

其中,最核心的兩個(gè)方法是:

  • doStartTag

  • doEndTag

doStartTag 

該方法會(huì)在JSP類內(nèi),被具體的標(biāo)簽實(shí)現(xiàn)類調(diào)用。用于實(shí)例的標(biāo)簽開始,執(zhí)行時(shí)pageContext和一系列屬性被認(rèn)為已經(jīng)設(shè)置完成。

會(huì)返回EVAL_BODY_INCLUDE或者SKIP_BODY,從這兩個(gè)結(jié)果的變量名稱可以看出,如果如果tag期望繼續(xù)處理body,就返回前者,否則不處理就返回后者。

doEndTag用于確認(rèn)該標(biāo)簽執(zhí)行后,頁面是否要繼續(xù)渲染。

整個(gè)taglib使用起來都比較便捷,直接在JSP中聲明 prefix 和 uri ,相當(dāng)于把這部分內(nèi)容依賴添加了進(jìn)來,然后直接使用標(biāo)簽進(jìn)行屬性的設(shè)置,對應(yīng)命名空間下標(biāo)簽的使用等。

而這些標(biāo)簽的聲明,是通過類似這樣的形式,被保存在Jar文件或者WEB-INF這些地方。

如何讀懂框架標(biāo)簽taglib的工作原理

具體的標(biāo)簽實(shí)現(xiàn)類,一般繼承TagSupport,然后重寫我們上面提到的doStartTag 和 doEndTag 方法。

所以,對于一般在JSP頁面內(nèi)有大堆的 <% %>  這種所謂的 scriptlet,可以直接定義一個(gè)標(biāo)簽,然后把邏輯移動(dòng)到重寫方法內(nèi)即可。

這些Tag聲明的tld,一般會(huì)在應(yīng)用部署后啟動(dòng)時(shí)進(jìn)行掃描,然后添加到Map里,

如何讀懂框架標(biāo)簽taglib的工作原理

頁面解析執(zhí)行的時(shí)候,會(huì)判斷對應(yīng)聲明的tld是否存在,沒有就會(huì)停止頁面執(zhí)行

如何讀懂框架標(biāo)簽taglib的工作原理

頁面解析生成Servlet類之后,執(zhí)行時(shí)會(huì)調(diào)用具體標(biāo)簽的屬性設(shè)置,doStartTag這些方法,此時(shí)如果一些屬性不存在,綁定不成功等這些具體的標(biāo)簽邏輯會(huì)被暴露出來。

比如我們在使用 Spring 標(biāo)簽時(shí),經(jīng)常使用其 form 標(biāo)簽進(jìn)行參數(shù)綁定。為了試驗(yàn),我們隨便寫一個(gè)Spring 的標(biāo)簽使用

此時(shí),JSP生成的內(nèi)容是這樣的

如何讀懂框架標(biāo)簽taglib的工作原理

然后頁面渲染時(shí),會(huì)真正的進(jìn)行數(shù)據(jù)綁定,判斷這些屬性的合法性等等,這里由于是隨便寫的一行代碼,無法綁定所有報(bào)錯(cuò)了。

如何讀懂框架標(biāo)簽taglib的工作原理

所以,對于 Spring、Struts2 等等這些框架的標(biāo)簽,本質(zhì)上執(zhí)行也還是這些邏輯,如果頁面在渲染的時(shí)候出現(xiàn)問題,了解清楚是在哪一步的時(shí)候出了問題,知道具體這些標(biāo)簽的工作原理。

例如下圖 Spring 的 InputTag 繼承關(guān)系,也沒有脫離Servlet 的Tag這個(gè)框。

如何讀懂框架標(biāo)簽taglib的工作原理

總結(jié)下,Taglib的工作原理,是在應(yīng)用部署的時(shí)候,解析tld的聲明。頁面渲染的時(shí)候,解析如果引入的tld不存在,就會(huì)報(bào)錯(cuò)。tld合法之后執(zhí)行 tag 的具體邏輯,根據(jù)返回值判斷是否繼續(xù)頁面的渲染。

以上就是如何讀懂框架標(biāo)簽taglib的工作原理,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:如何讀懂框架標(biāo)簽taglib的工作原理
URL地址:http://weahome.cn/article/ijhhjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部