JSP標籤工作原理
阿新 • • 發佈:2019-02-08
<taglib>
<taglib-uri>
http://www.example.com/taglib
</taglib-uri>
<taglib-location>
/taglib.tld
</taglib-location>
</taglib>
這就相當於給這個有意義的硬碟路徑“/taglib.tld”了一個別名,也就是那個看似url的uri。然後就可以在jsp中引用了。但是我看chronicles的程式碼是,發現web.xml中並沒有這樣的定義。如是甚是納悶。今天找了一天終於找到了答案。回到上面的tld檔案,可以看到這樣一行:
<uri>http://java.sun.com/jsp/jstl/core</uri>
這個tld檔案是包含在一個叫做standard.jar的檔案中的,該jar包放到了web/lib下,也就是放到了classpath下面。開啟jar檔案發現有兩個資料夾:org, META-INF。第一個當然就是package名了,在第二個檔案裡包含了一大堆tld檔案。每個tld都有uri這個標籤來指定一個uri。於是可以大概猜測,jsp檔案掃描classpat下的所有META-INF資料夾找裡面的tld檔案,如果遇到uri匹配的就指定該檔案。然後做了個實驗,把standard.jar解壓,改變裡面的uri標籤,比如對於該例,把 http://java.sun.com/jsp/jstl/core 改成 http://java.sun.com/jsp/jstl/cor
再做兩個令人髮指的實驗,把tld檔案拷出來,分別放到和META-INF平級的目錄下和org目錄下,竟然也都能找到。看到它搜尋的範圍還真不小。所以結論是jsp會在所有的classpath及其所有子目錄下進行去搜索。那麼classpath下有很多jar包的時候掃描會不會特別慢,或者有一些索引快取機制吧。