一个JSP页面引入另一个JSP页面
JSP文件中引入另一个JSPJSP include 指令JSP include 动作JSTL 标签库 import转载自:@fn_2015JSP include 指令include 指令告诉容器:复制被包含文件汇总的所有内容,再把它粘贴到这个文件中。<%@include file="inlayingJsp.jsp" %>注意:include 指令 <%@include %>
JSP文件中引入另一个JSP
转载自:@fn_2015
JSP include 指令
include 指令告诉容器:复制被包含文件汇总的所有内容,再把它粘贴到这个文件中。
<%@include file="inlayingJsp.jsp" %>
注意:
-
include 指令
<%@include %>
在转换前插入“Header.jsp”的源代码,即静态包含 -
<%@include %>
包含的内容,不论是 txt 文本还是 jsp 文件,被包含的页面都不会重新编译 -
<%@include %>
包含了几个 JSP 转译成 servlet 时就会有几个.class
文件,如果在 jsp1 定义了变量i
同时在 jsp2 也定义了变量 i 那么你编译都会通不过的,jsp 容器会告诉你i重复定义了。就是说不管你包含了几个 jsp 页面转译成 servlet 时始终只有一个.class
文件 ,所以说对于 include 指令 要慎用!
JSP include 动作
而 include 动作在运行时插入“Header.jsp" 对于该请求的响应。
<jsp:include page="inlayingJsp.jsp" flush="true" />
注意:
<jsp:include></jsp:include>
为动态包含,如包含 jsp 文件,则每次加载主页面的时候,被包含的页面都要重新编译。
静态导入与动态导入
1、什么是静态导入
静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来。
include的静态导入指令使用语法:
复制代码代码如下:
<%@include file="relativeURLSpec"%>
静态导入使用范例include1.jsp:
复制代码代码如下:
<%@page contentType="text/html; charset=utf-8" language="java" %>
<!DOCTYPE html">
<html>
<head>
<title>静态include范例</title>
</head>
<body>
<!--使用include编译指定导入页面-->
<%@include file="error.jsp"%>
</body>
</html>
其中error.jsp是一个简单的错误处理页面,代码如下:
复制代码代码如下:
<%@page contentType="text/html; charset=utf-8" language="java" isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<title>错误提示页</title>
</head>
<body>
这是一个错误处理页面</br>
</body>
</html>
在tomcat下运行该静态include范例后,查看生成的servlet类可看到如下代码段
编译后产生的 .class
文件所在路径(Windows):
<Tomcat Home>\work\Catalina\localhost\<Deployment Directory>\org\apache\jsp\...
从方框中即可看出静态导入是:包含页面在编译时将完全包含被包含页面的代码。需要指出的是,静态导入还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令有冲突,那么页面就会出错。
2、什么是动态导入
动态导入是不会导入include页面的编译指令的,而是仅仅将被导入页面的body内容插入本页面。
动态导入的语法格式
代码如下:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
或者
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>
flush 属性用语指定输出缓存是否转移到被导入文件中。如果指定为 true,则包含在被导入文件中,如果指定为 false,则包含在原文件中,对于 JSP1.1 旧版本,只能设置为 false
对于第二种语法格式,则可在被导入页面中加入额外的请求参数。
动态导入范例:
我们将上面的include1.jsp代码静态导入改为动态导入
复制代码代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<!DOCTYPE html>
<html>
<head>
<title>静态include范例</title>
</head>
<body>
<!--使用include编译指定导入页面-->
<jsp:include page="error.jsp" />
</body>
</html>
编译后查看生成的servlet代码,可以看到如下段:
红色方框中代码显示出,动态导入只是使用了一个include方法来插入目标页面的内容,而不是将目标页面完全融入到本页面中。
总结
指令与动作:
- include 指令 是“先包含,后编译”,在编译时主文件已经包含被 include 的文件内容(即源代码);
- include 动作 是“先运行,后包含”,在运行时主文件才包含被 include 的文件运行结果。
具体使用的话:静态导入适合导入不会经常变化的资源,例如 .html
, .css
文件;而动态导入适合一个时常变化的资源,例如 .jsp
文件。
静态导入和动态导入区别
- 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
- 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
- 动态导入还可以增加额外的参数。即如下代码方式
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>
附:当然你也可以使用JSTL 标签库 import
<!-- 顶部 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 加了如上 tld 申明之后就可以愉快地使用 jstl 了 -->
<c:import url="inlayingJsp.jsp"></c:import>
更多推荐
所有评论(0)