关联uri和tld
jsp容器形成一个标记库映射要经过三步:
1.jsp容器从web.xml文件中读取用户定义的条目。此步被称为显式映射(explicit mapping)。
2.jsp容器读取jar文件中的所有taglib.tld文件。由于tld文件本身就是一些关于映射的信息。所以,jsp容器会为每个taglib.lib文件建立对应的映射。这整个步骤被称为隐含映射(implicit mapping)。
3.最后,jsp容器会再增加一条缺省映射。http://java.sun.com/JSP/Page。这条映射被称为著名映射(well-known mapping)。
显式映射
在web.xml文件中,映射是由<taglib>标记完成的。其中有两个元素需要定义。
<taglib-uri>需要映射的uri。
<taglib-location>这里是tld文件的地址。当然是能访问到的。
举例:
<taglib>
<taglib-uri>
http://www.manning.com/studyKit
</taglib-uri>
<taglib-location>
/myLibs/studyKit.tld
</taglib-location>
</taglib>
一旦这种映射建立。我们就可以在jsp文件中使用标记库了。例如:
<%@ taglib prefix="study" uri="http://www.manning.com/studyKit" %>
.如果uri的值和<taglib-uri>的值相等。jsp引擎会去使用<taglib-location>中的值。
注意<taglib-location>中的路径形式。如果以/开始,代表相对于网络应用根目录;如果不是以/开始,则代表相对于/WEB-INF/目录。
.如果uri的值和<taglib-uri>的值不相等。会出现以下三种情况中的一种。
1-如果uri中的值本身是一个绝对uri(带协议,主机,目录),则会报转换时(translation time)错误。
2-如果uri的值是一个相对于根的uri,会被认为是指向相对于网络应用的文档根目录。
3-如果uri是非根uri,被理解为和jsp页处于相同目录。
理解前缀
在jsp页中每个标签由两部分组成。如:<jsp:include>。这里jsp就是前缀,include表示动作。
不同的标签前缀就代表者不同的标签库。
为了避免冲突,jsp规范对前缀的命名做出一些限制:
1.不能用jsp做前缀。因为已经能被使用了;
2.以下标签作为保留也不可以使用:jspx,java,javax,servlet,sun,sunw。