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

qod*_*nja 2 jsp taglib include

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

但是在

main.jsp模板有这样的:

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<jsp:include page="/jsp/common_head.jsp"/>
Run Code Online (Sandbox Code Playgroud)

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

<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
Run Code Online (Sandbox Code Playgroud)

这有必要吗?

或换句话说

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

Bal*_*usC 5

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

在例如Tomcat的情况下,查看/work所有这些编译的JSP的文件夹.查看他们的来源,一切都很清楚.


Chr*_*oop 5

<jsp:include page="/jsp/common_head.jsp"/>
Run Code Online (Sandbox Code Playgroud)

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

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

<%@ include file="/jsp/common_head.jsp" %>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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