我不太熟悉它在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声明传播到包含文件?
答案 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)
在其他模板系统中,定义通常会被结转。我不明白你为什么要再次使用它