它们的区别主要为以下几点:
| jsp:include 动作 | include指令 | |
| 语法 |
<jsp:inlcude page="relative-path-to-resource"/> |
<%@ include file="relative-path-to-resource" %> |
| 被包含发生时间 | 请求页面时 | jsp页面转为servlet时 |
| 被包含内容 | jsp页面的output(一般为html) | jsp页面的源码 |
| 对应servlet数目 |
两个 (包含页面和被包含页面各自 对应一个servlet) |
一个 (只有包含页面对应的servlet 即主页面的servlet) |
|
被包含页面设置的 resposne header 信息, 能否影响 到包含页面? | 不能,各自对应不同的servlet。 | 能,对应同一个servlet。 |
|
被包含页面定义的 属性和方法信息, 能否被包含页面使用? | 不能,各自对应不同的servlet。 | 能,对应同一个servlet。 |
|
当被包含页面发生 变化时, 包含页面是否需要更新? |
不需要, 因为被包含的是jsp页面的结果(html)。 |
需要,因为包含的是jsp的源码, 需要重新进行jsp到servlet 的转换。 |
| 相应的servelt代码 | RequestDispatcher的include方法 | 无 |
补充说明(1):
其中的relative-path-to-resource,如果不是以"/"开始,则是相对于当前包含文件的相对路径。
如果是以"/"开始,则是相对于当前Web应用程序的根目录相对路径。
另外,由于include指令对于包含页面的难维护性,所以一般推荐使用include动作,
除非有特殊需求,如需要访问被包含页面中定义的属性和方法。
补充说明(2):
jsp转化为servlet场景
| jsp转化为servlet | 编译servlet | servlet装载到server内存 | 调用jspInit方法 | 调用_jspService方法 | |
| 编写jsp页面后保存 | |||||
| 第一次请求 | 执行 | 执行 | 执行 | 执行 | 执行 |
| 第二次请求 | 不执行 | 不执行 | 不执行 | 不执行 | 执行 |
| 重启服务器 | |||||
| 第三次请求 | 不执行 | 不执行 | 执行 | 执行 | 执行 |
| 第四次请求 | 不执行 | 不执行 | 不执行 | 不执行 | 执行 |
| 编辑jsp页面后保存 | |||||
| 第五次请求 | 执行 | 执行 | 执行 | 执行 | 执行 |
| 第六次请求 | 不执行 | 不执行 | 不执行 | 不执行 | 执行 |
本文详细对比了 JSP 中 include 指令与 jsp:include 动作的区别,包括它们的语法、被包含内容的时间点、对应的 Servlet 数目等方面,并提供了实用的补充说明。
165

被折叠的 条评论
为什么被折叠?



