|
8.创建标签库描述文件 标签库描述文件(Tag Library Discriptor,TLD)是一份标准的XML文件,用来记录一个标签库内拥有哪些标签?每个标签包含哪些属性?取得这些信息后,JSP容器才能正确地处理并运行JSP所包含的自定义标签。以下是一个JSP2.0规范的TLD: weclome.tld <?xml version="1.0" encoding="UTF-8"?> <!-- 标签库描述符 --> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <!-- 此标签库的一个描述 --> <description>A tag library exercising SimpleTag handlers.</description> <!-- 此标签库的版本,由程序设计师自行决定(必须) --> <tlib-version>1.0</tlib-version> <!-- 定义一个简短的名称(必须)主要由工具使用 --> <short-name>SimpleTagLibrary</short-name> <!-- 定义该标签库的唯一uri名(在taglib指令中使用) --> <uri>/SimpleTagLibrary</uri> <tag><!-- 定义每个标签的特性 --> <description>body content to Upper</description><!-- 描述 --> <name>simpletag</name> <!-- 自定义标签的名称 --> <tag-class>xmh.comchapter11.Welcome</tag-class> <!-- 此标签对应的处理类 --> <body-content>scriptless</body-content><!-- 定义标签主体的种类:指定标签的格式,empty表示标签没有标签主体;JSP表示标签的标签体中可以包含JSP代码;scriptless表示标签主体中可以包含EL表达式和JSP的动作元素,但不能包含JSP的脚本元素;tagdependent表示标签的标签主体交由标签本身去解析处理。如果指定为它,那么你在标签体中所写的任何代码都会原封不动地传给标签处理器,而不是传递执行的结果。 --> <attribute> <name>attrName</name> <!-- 此属性的名称 --> <required>false</required> <!-- 此属性是否为必要:true | false --> <rtexprvalue>true</rtexprvalue><!-- 属性值是否可以在JSP运行时期动态产生:true | false --> </attribute> </tag> </taglib> 9.在web.xml文件中声明TLD的位置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> ...... <jsp-config> <taglib> <!-- 指定TLD文件所对应的URI --> <taglib-uri>/mytag</taglib-uri> <!-- 指定TLD文件的存放路径 --> <taglib-location>/WEB-INF/tlds/weclome.tld</taglib-location> </taglib> </jsp-config> </web-app> 注意在JSP2.0规范中可以不用声明TLD的位置,因为容器开始建立<uri>和TLD映射时,会首先在web.xml中查找,看是否有<taglib>项,如果确实有,就会使用这些设置来帮助建立映射。否则会在WEB-INF目录以及它的tlds子目录(还可以是jar文件中)下查找TLD文件,然后自动建立TLD文件和<uri>名之间的映射关系。 10.在JSP文件中用taglib指令引入标签库 <%@ taglib uri="/mytag" prefix="my" %> 11.在JSP中使用标签库标签 <my:simpletag>Hello,World!</my:simpletag> 12.自定义JSP标签的处理过程 <!--[if !supportLists]-->(1)在JSP中引入标签库:<% @ taglib prefix="taglibprefix" uri="tagliburi" %>。 <!--[if !supportLists]-->(2)在JSP中使用标签库标签:<prefix : tagname attribute="tagattribute">。 <!--[if !supportLists]-->(3)Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值。 <!--[if !supportLists]-->(4)Web容器根据uri属性在web.xml找到对应的<taglib>元素。 <!--[if !supportLists]-->(5)从<taglib>元素中获得对应的<taglib-location>元素的值。 <!--[if !supportLists]-->(6)Web容器根据<taglib-location>元素的值从WEB-INF/目录下找到对应的.tld文件。 <!--[if !supportLists]-->(7)从.tld文件中找到与tagname对应的<tag>元素。 <!--[if !supportLists]--><!--[endif]-->(8)从<tag>元素中获得对应的<tag-class>元素的值。 <!--[if !supportLists]-->(9)Web容器根据<tag-class>元素的值创建相应的标签处理类的实例。 <!--[if !supportLists]-->(10)Web容器调用这个实例的doStartTag/doAfterBody/doEndTag方法完成相应的处理。