JSP页面的静态包含和动态包含的区别与联系
JSP中有两种包含:
- 静态包含:<%@include file="被包含页面"%>
- 动态包含:<jsp:include page="被包含页面" flush="true">
下面以一个例子来说明如何使用包含
实例:
项目文件树:
header.jsp文件中内容:
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 4 <title>Insert title here</title> 5 </head> 6 <body> 7 <h1>This is header</</h1>
content.jsp文件中内容
1 <table border="1"> 2 <tr> 3 <td>col1</td> 4 <td>col2</td> 5 </tr> 6 <tr> 7 <td>col1</td> 8 <td>col2</td> 9 </tr> 10 </table>
footer.jsp文件中内容:
1 <hr> 2 copyright: 1999-2010 3 </body> 4 </html>
1.静态包含:
index.jsp文件中内容:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <%@ include file="/header.jsp" %> <%@ include file="/content.jsp" %> <%@ include file="/footer.jsp" %>
页面显示结果:
被编译成的java文件:
2.动态包含
index.jsp文件中内容:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <jsp:include page="/header.jsp"></jsp:include> <jsp:include page="/content.jsp"></jsp:include> <jsp:include page="/footer.jsp"></jsp:include>
页面显示结果:
被编译成的java文件:
说明:这个例子,使用静态包含和动态包含最终的执行结果相同,但是实现过程不同,很明显编译成的java文件数目不同。
3.静态和动态包含的区别与联系
注:下文将包含有其它文件的jsp文件称为主体文件,比如上文中的index.jsp文件.将被包含的文件称为包含文件,比如上文中的header.jsp文件.
- <%@ include file=” ”%>是指令元素。<jsp:include page=” ”/>是行为元素
- 最终编译成java文件的数目不同(从上面的例子可以看出)
- 静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
- 动态包含是各个jsp文件分别转换,分别编译。最终编译成多个java文件。
- 执行时间不同
- 静态包含发生在:JSP ---> java文件阶段。
- 动态包含发生在:执行class文件阶段,动态加入。
- 静态包含在两个文件中不能有相同的变量,动态包含允许。
- 由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。而动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象。
- 无论是动态包含还是静态包含,其request对象都是相同的。
- 静态包含最终编译成一个java文件,有一个request对象很好理解。而动态包含最终编译成多个jsp文件,为何会使用一个request对象呢?其实这些jsp组合的过程是一个请求转发的过程,自然也使用同一个request对象了。
4.静态包含和动态包含的使用
简单总结一下,就一句话:被包含的页面是静态页面就用静态包含,是动态页面就用动态包含.(当然,不是很绝对,但是这样用没有错.)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探