在web.xml中無法配置的問題

自定義標籤庫時,在web.xml中無法配置的問題
原因在於:
servlet 2.3的配置不需要<jsp-config>標籤的,  
servlet 2.4容器中<taglib>需要在<jsp-config>中。
(實際上,區分就在web.xml一開時的<web-app version="2.5"...web-app_2_5.xsd裏,這裏的2.5就代表2.5的版本)

完整的例子是孫衛琴的《Tomcat與Java Web開發技術詳解》中的第二章:創建和發佈web應用中,2.2.7 部署JSP Tag Library。
在web應用中可以加入Tag Library(標籤庫)。Tag Library向用戶提供了自定義JSP標籤的功能。以下一個例子就是自定義了一個標籤庫mytaglib。將<mm:hello/>解析爲"hello"。

(1)編寫處理hello標籤的類HelloTag.java:
Java代碼  收藏代碼
  1. package mypack;   
  2. import java.io.PrintWriter;   
  3. import javax.servlet.jsp.JspException;   
  4. import javax.servlet.jsp.JspTagException;   
  5. import javax.servlet.jsp.tagext.TagSupport;   
  6. public class HelloTag extends TagSupport {   
  7. public void HelloTag()   
  8. {   }   
  9.   
  10. //Method called when the closing hello tag is encountered   
  11. public int doEndTag()throws JspException   
  12. {   
  13. try   
  14. {   
  15.    pageContext.getOut().print("Hello");   
  16. }catch(Exception e)   
  17. {   
  18.    throw new JspTagException(e.getMessage());   
  19. }   
  20. //this tag does not support a Tag Body(僅僅是<mm:hello/>,無標籤體),so we return SKIP_BODY   
  21. return SKIP_BODY;   
  22. }   
  23. public void release()   
  24. {   
  25. //Call the parent's release to release any resources used by the parent tag.This is just good practice for when you start creating hierarchies of tags   
  26. super.release();   
  27. }   
  28. }   

(2) 創建Tag Libraray的描述文件mytaglib.tld文件,在這個文件中定義mytaglib標籤庫和hello標籤。這個文件存放的位置爲/WEB-INF/mytaglib.tld。
Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <taglib>   
  3. <tlibversion>1.0</tlibversion>   
  4. <jspversion>1.1</jspversion>   
  5. <shortname>mytaglib</shortname>   
  6. <uri>/mytaglib</uri>   
  7. <tag>   
  8. <name>hello</name>   
  9. <tagclass>mypack.HelloTag</tagclass>   
  10. <bodycontent>empty</bodycontent>   
  11. <info>Just Says Hello</info>   
  12. </tag>   
  13. </taglib>   

(3)在web.xml文件中加入<taglib>元素:這裏會出錯,說不能識別<taglib>原因一開始已經講了。
Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.5"   
  3. xmlns="http://java.sun.com/xml/ns/javaee"   
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <jsp-config>-------------------  
  7. 如果是servlet 2.4,這個標籤要加,否則不加也對   
  8.    <taglib>   
  9.      <taglib-uri>/mytaglib</taglib-uri>   
  10.      <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>   
  11.    </taglib>   
  12. </jsp-config>   
  13. </web-app>   


<taglib>中包含兩個屬性<taglib-uri>和<taglib-location>。<taglib-uri>指定Tag Library標示符;<taglib-location>指定Tag Library的描述文件tld的位置。

(4)在web應用中加入hello標籤(hello.jsp)
<%@ tablib prefix="mm" uri="/mytaglib"%>------這句必須,並且prefix的參數mm是隨便取的。
Html代碼  收藏代碼
  1. <html>   
  2. <head><title>helloapp</title></head>   
  3. <body>   
  4. <b><mm:hello/>:lin!</b>   
  5. </body>   
  6. </html>   
網頁結果爲:hello:lin!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章