TagLib的部署問題

如果在jsp中有使用自定義標籤的需求,則不可避免的會發生如下的需求:
1、使用到的標籤是特殊的,當前沒有具體的實現;
2、使用到的標籤已經存在於了.jar文件中, 但很不幸該.jar文件在.ear下面,並位於/WEB-INF/lib之外;
3、使用到的.jar文件在單獨的taglib.jar中,且位置可以由你自己決定隨便放置;

如果是 1 的情況, 最好的辦法是自己實現一個標籤, 這可以通過繼承javax.servlet.jsp.tagext.TagSupport來完成, 並把生成的.class文件放置在/WEB-INF/classes下面,同時在合適的位置按照tld的規範來書寫一個.tld文件即可,需要注意的是.tld文件需要放置在/WEB-INF/下面,當然按照jsp2.0的規範如下的路徑也是可以的,/WEB-INF/tld/.....

如果是第二種情況:
需要做的工作和第一步唯一的不同就是,不用書寫.java文件,但配置相關的.tld文件是必須的,因爲規範中明確的指出了除了/WEB-INF/下的.tld都不被解析爲標籤描述定義;

如果是第三種情況:
如果這種情況下的.jar文件中在/META-INFO中有.tld文件,且其中有<uri></uri>的聲明,那事情就是比較完美的了,需要做的就是把.jar文件放置到/WEB-INF/lib/下面, 同時選擇是在頁面中直接使用.jar文件中的.tld中定義的<uri>還是,另外自己在web.xml中根據那個uri重新再定義新的<taglib-uri>,這都不是問題;

如果在.jar中沒有.tld文件,那只有增加這個.tld文件了,增加的.tld文件的位置可以在如下良種情況中做出選擇:.jar文件的/META-INF/中, /WEB-INF/中,建議放置在.jar中,畢竟它已經是一個獨立的資源包了,有什麼理由不讓它變的徹底通用呢?
當然了,如果你要在頁面中直接使用<%@ taglib prefix="c" uri="/WEB-INF/lib/m.jar" %>這種變態形式的引用, 那需要遵守的一點就是這個.jar文件的/META-INF/中必須有一個名字爲taglib.tld文件來描述標籤。

從上面的情況來看, 在根據jsp2.0規範,則可以知道,在部署tag的時候是需要嚴格遵守如下規範的:


[color=blue] .tld文件出現的位置必須是如下兩個中的一個:
/WEB-INF/lib/下的.jar文件的/META-INF/下面
/WEB-INF/下面,或者它的自目錄下面[/color]

只要明確了上面的.tld文件的位置問題, 其他的問題就是.class類能否成功加載的問題了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章