當servletcontainer啓動時,它會掃描整個類路徑以查找所有已部署的JAR文件的.tld
文件,包括/META-INF
文件夾。 JSTL的JAR文件中他人c.tld
文件,它開始像如下:
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
...
注意<uri>
條目。這在servletcontainer的啓動過程中被解析和記住。 .tld
文件爲每個標籤聲明標籤處理程序類,它代表具體的Java代碼完成「幕後」的所有工作。例如,<c:out>
聲明如下:
<tag>
<description>
Like <%= ... >, but for expressions.
</description>
<name>out</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class>
<body-content>JSP</body-content>
...
現在,當一個JSP文件聲明與正是這種URI,那麼.tld
文件中的問題將被用於定位標籤類和執行這些標籤庫。
因此,taglib URI只是一個虛擬地址,它只存在於servletcontainer的上下文中,而不是外部,即使某些taglibs碰巧在該URI後面有一個真實的HTTP站點。該URI只是一個唯一的標識符。它不一定需要是http://something
。它可以是一切,但網站地址是一個相對強大的唯一標識符。這保證幾乎100%都不會有其他taglib具有相同的URI。順便說一下,您在包名中也會看到這種獨特性。
+1並且接受... *「因此,taglib URI只是一個虛擬地址,它只存在於servletcontainer的上下文中,而不是在」* ...哦哦「之外。然而,它以'http://'開頭:(我以某種方式發現這不僅非常令人困惑: - /我知道軟件包名稱,但至少這些不是以看起來像協議的形式開始的:) – 2012-03-11 03:32:21
請注意,它是一個URI,而不是一個URL。請參閱維基百科瞭解其差異。 – BalusC 2012-03-11 03:33:30
哦,確定...而這本身也是人們主要的**主要來源之一。 URI/URL的區別本身就是SNAFU的一個主要概念。這裏我們有一個URI,它看起來就像一個URL,因爲一個URI可以(它不需要,但它可以)通過一個位置來標識一個資源,這是非常非常非常混亂的。我悲傷地認爲,我們生活在一個非常混亂的世界,由不完整,思想欠佳,「標準」和「規格」組成。謝天謝地,一些紀律(如工程和醫學)比計算有更高的標準; ) – 2012-03-11 12:09:27