相同点:都用于包含其他页面。
不同点:
1. 语法格式
文件包含指令: <%@ include file="path" %>
动作包含指令: <jsp:include page="url" />
2. 包含文件的编译
文件包含的include指令是静态包含。即使被包含的文件中有JSP代码,在包含时也不会被编译执行。将两个页面组合成一个后,编译处理为一个Java文件,最后返回结果页面。
如下图:
<jsp:include>动作标识的原理是将被包含的页面编译处理后将结果包含在页面中。当该标识被执行时,程序会请求转发到被包含的页面并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码。
如下图:
Notes:
对于<jsp:include>,由于静态页面不需要编译即可被web容器解析,所以如果被包含的页面是个静态页面,不会经历编译处理这一过程。
3. 属性表达式支持
include指令通过file属性指定被包含的文件,该属性不支持任何表达式。
<jsp:include>标识通过page属性指定被包含的文件,该属性支持JSP表达式。
4. 变量/方法能否重命名
在应用include指令包含文件时,由于被包含的文件最终会生成一个文件,所以包含文件和被包含文件不能有重名的变量或方法。
在应用<jsp:include>包含文件时,由于每个文件单独编译,所以变量和方法名不冲突。