静态包含命令:<%@include file="xxx.jsp" %>,主页面会把子页面的源代码包含进来,然后整体编译成servlet。
动态包含命令:<jsp:include page="xxx.jsp">,主页面和子页面分别单独编译成相应的servlet。
所以,当子页面的代码发生变化后,通过静态包含命令引入该子页面的主页面需要重新编译。而通过动态命令包含该子页面的主页面就不需要重新编译。举个例子,现在有三个页面,分别为A.jsp,B.jsp和C.jsp。
在A.jsp中,静态包含<%@include file="C.jsp" %>
在B.jsp中,动态包含<jsp:include page="C.jsp">
那么,当C.jsp被修改之后,就需要重新编译C.jsp和A.jsp,而B.jsp不需要重新编译。
因此,对于内容会经常发生变化的子页面,通常使用动态包含命令来引用。
jsp页面中,通常需要包含各种标签库,例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
为了管理的方便,我们把这部分代码抽出来,放到taglib.jsp中,其他的jsp页面包含taglib.jsp就可以了。这个时候需要特别注意的是,只能使用静态包含。原因是,每个jsp页面都用到了这些标签,如果使用动态包含,那么这些jsp页面和taglib.jsp是分别编译的,编译这些jsp页面的时候,编译器就不认识这些标签,只把这些标签当作文本来处理,虽然编译通过,但是会导致运行时错误。