jsp:include详解,以及和include指令的区别

<jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。

语法

<jsp:include page="relative URL" flush="true" />

page: 包含在页面中的相对URL地址
flush: 布尔属性,定义在包含资源前是否刷新缓存区

例子

//datetime.jsp
<%= new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()) %>
//index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>
当前时间为:<jsp:include page="datetime.jsp"/>
</p>
</body>
</html>

运行结果:

当前时间为:2017-08-17 13:54:51

jsp:include与include区别

1. 编译成servlet区别

include指令:我们知道JSP文件本身就是servlet,然而JSP文件需要预先编译成servlet,也就是class文件,而<%@include%>页面jsp在请求之前就已经进行了预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servlet!

jsp:include:所有JSP文件代码分别处理,是在页面被请求的时候才进行编译,将多个jsp文件编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。如果被包含文件是动态的,那么就会生成两个Servlet,也就是被包含文件也要经过jsp引擎编译执行生成一个Servlet,两个Servlet通过request和reponse进行通信。如果被包含的文件是静态的,那么这种情况和<%@include>就很相似,只生成了一个Servlet,但是他们之间没有进行简单的嵌入,而依然是通过request和reponse进行的通信。

2. 用法区别

include指令:当JSP转换成Servlet时引入指定文件,<%@ include file="head.jsp"%>

jsp:include:当JSP页面被请求时引入指定文件,<jsp:include page="head.jsp"/>

3. 使用jsp:include动作还是include指令

使用include指令,如果被包含的文件发生改变,那么,用到它的所有Jsp页面都需要更新。仅当include动作不能满足要求时,我们才应该使用include指令。有些开发人员认为include指令生成的代码执行起来比使用include动作的代码更快。尽管原则上由可能的确如此,但性能上的差异很小,以致难以测 量,同时,include动作在维护上的优势十分巨大,当两种方法都可以使用时,include动作几乎肯定是首选的方法。

对于文件包含,应该尽可能地使用include动作。仅在所包含的文件中定义了主页面要用到的字段或方法,或所包含的文件设置了主页面的响应报头时,才应该使用include指令。

4. include指令比jsp:include更加强大

include指令允许所包含的文件中含有影响主页面的Jsp代码,比如响应报头的设置和字段、方法的定义。

<%! int num=0; %>
<html>
 <body>
  <%@ include file="subpage.jsp" %>
  <%= num %>
 </body>
</html>

这个使用include动作时这是不可能的,因为num变量未定义,主页面不能成功的转换成servlet。

总结

1. include可以在JSP页面转换成Servlet之前,将JSP代码插入其中。它的主要优点是功能强大,所包含的代码可以含有总体上影响主页面的JSP构造,比如属性、方法的定义和文档类型的设定。它的缺点是难于维护只要被包含的页面发生更改,就得更改主页面,这是因为主页面不会自动地查看被包含的页面是否发生更改。

2. jsp:include动作是在主页面被请求时,将次级页面的输出包含进来。尽管被包含的页面的输出中不能含有JSP,但这些页面可以是其他资源所产生的 结果。服务器按照正常的方式对指向被包含资源的URL进行解释,因而这个URL可以是Servlet或JSP页面。服务器以通常的方式运行被包含的页面, 将产生的输出放到主页面中,这种方式与RequestDispatcher类的include方法一致。它的优点是在被包含的页面发生更改时,无须对主页 面做出修改。它的缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。