在JSP中是否有必要重新声明包含文件中的标记库?

时间:2009-11-05 19:53:49

标签: jsp include taglib

我不太熟悉它在JSP中的工作原理

但在

main.jsp模板有这样的:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<jsp:include page="/jsp/common_head.jsp"/>

然后在common_head.jsp中我们又有了这个:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>

这是必要的吗?

或换句话说

是否将taglib声明传播到包含文件?

5 个答案:

答案 0 :(得分:5)

是的,这是必要的。在第一次执行之前,每个JSP文件将被单独转换/翻译/编译为独立的Servlet类。所有标签都将被翻译成“真正的”Java代码/方法。如果您没有声明taglib,那么JSP编译器不知道为特定标记生成/调用需要哪些Java代码/方法。

例如,如果是Tomcat,请查看/work文件夹中所有已编译的JSP。查看他们的来源,一切都很清楚。

答案 1 :(得分:5)

<jsp:include page="/jsp/common_head.jsp"/>

... tag是一个动态包含意味着它动态调用common_head.jsp页面,该页面独立于包含页面进行编译。因此,应该需要taglib指令。

另一方面,如果您使用include 指令进行静态包含

<%@ include file="/jsp/common_head.jsp" %>

...文件将复制粘贴,并使用包含它的页面进行编译。然后不需要taglib指令。

在任何情况下,您可能希望包含taglib,以获得编辑器在开发过程中使用的标签支持。

请注意静态文件是静态包含的,即使使用jsp:include标记

也是如此

包含指令:http://java.sun.com/products/jsp/syntax/1.2/syntaxref129.html#997991

jsp包括:http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

答案 2 :(得分:2)

当您包含动态资源时,该资源是“独立的”,因此它应包含您正在使用的任何标记库。其他问题是如果你正在使用那些标签......

答案 3 :(得分:0)

是的,它是JSP编译所必需的。 您还可以在taglib下面使用它,而不要使用c.tld。

 Type           Name           Value                                   TTL        
    A        mydomainname.com     points to 13.232.XXX.XXX          Automatic       
    CNAME    test                 is an alias of mydomainname.com    Automatic      
    CNAME    www                  is an alias of mydomainname.com    Automatic      
    TXT      mydomainname.com     ca3-b78797cee2b346558bf7a891ff5bd5daXX Automatic

希望这会有所帮助

答案 4 :(得分:-3)

在其他模板系统中,定义通常会被结转。我不明白你为什么要再次使用它