include指令
语法:
<%@ include %>
< jsp:include >
@include指令 – 在翻译阶段执行
@include可以包含任意的文件,但只把文件的内容包含进来。
- 如果使用
include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP合并翻译成一个servlet。
include指令引入通常也称之为静态引入。
使用:
<%@ include file="relativeURL"%>其中的file属性用于指定被引入文件的路径。
路径以/开头,表示代表当前web应用。
注意问题:
1. 被引入的文件必须遵循JSP语法。
2. 被引入的文件可以使用任意的扩展名,即使其扩展名是html
JSP引擎也会按照处理jsp页面的方式(标签元素)处理它里面的内容
JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。
3. 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
示例:
新建head.jspf页面和foot.jspf页面,分别作为jsp页面的头部和尾部,存放于WebRoot下的jspfragments文件夹中,代码如下:
head.jspf代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<h1 style="color:red;">网页头部</h1>
foot.jspf代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<h1 style="color:blue;">网页尾部</h1>
在WebRoot文件夹下创建一个index.jsp页面,在index.jsp页面中使用@include指令引入head.jspf页面和foot.jspf页面
代码如下:
<%-- 使用include标签引入引入其它JSP页面 --%>
<%@ include file="/jspfragments/head.jspf" %>
<h1>网页主体内容</h1>
<%@ include file="/jspfragments/foot.jspf" %>
查看转意后 .java 文件,可以看出 head.jspf和foot.jspf页面的内容都使用out.write输出到浏览器显示了。
注
使用@include可以包含任意的内容,文件的后缀无所谓。
这种把别的文件内容包含到自身页面的@include语句就叫作静态包含,作用只是把别的页面内容包含进来
jsp:include 标签 – 在请求处理阶段执行.(在后面标签章节中仍会讲到)
<jsp:include page=”relativeURI” flush=”true” />叫作动态include(动态包含),是jsp动作的一种
优点:
jsp:include 的优点在于:总是会检查所含文件中的变化。
与 @include 先包含后编译 不同的是 jsp:include 采用 先编译,后包含
原理:
jsp:include 包含的是所包含 URI 的 响应,而不是 URI 本身。
这意味着:对所指出的 URI 进行 解释,因而包含的是 生成的响应。如果页面是 HTML,那么将得到一点也没有变化的 HTML。但是,如果是 Perl 脚本、Java servlet 或者 CGI 程序,那么得到的将是从该程序解释而得的结果。
虽然页面通常就是 HTML,但实际程序恰好是达到目的的手段。
而且,由于每次请求页面的时候都会进行解释,因此从来不会象使用 include 伪指令时那样高速缓存结果。
虽然这只是很小的变动,但它却导致了您所见到的行为中的全部差异。
总结
混合使用
include 的使用
如果站点包含一些(如果有变化,也很少)几乎没有变化的页眉、页脚和导航文件,那么基本的 include 伪指令是这些组件的最佳选项。
由于 include 伪指令采用了高速缓存,因此只需放入包含文件一次,其内容就会被高速缓存,其结果会是极大地提高了站点的性能。
jsp:included的使用
然而,对于现在许多 Web 应用程序或站点而言,地毯式的高速缓存并不能解决问题。虽然页眉和页脚可能是静态的,但是不可能整个站点都是静态的。
例如,从数据库提取导航链接,外部调用其他api,并且许多基于 JSP 技术的站点还从其它站点或应用程序上的动态 JSP 页面提取内容
如果正在处理动态内容,那么需要采用 jsp:include 来处理该内容。
最好的解决方案是经常把这两种方法混合搭配使用,将每种构造用到最恰当的地方。
二者区别
<%@ include file=""%>指令在编写代码的时候一般放在最顶部,主要作用 是 方便 重用代码 的使用
<jsp:include page="" flush="" />标签导入一个文件的时,这个文件是经过编译后倒入,本质上是 包含 这个要导入文件经过编译后的内容,所以可以含有与当前jsp程序中重复的内容,(在包含过来之前就会被解析掉)

本文详细介绍了JSP中的两种include指令:@include指令用于静态引入,可在编译时合并两个JSP页面;jsp:include标签则在运行时动态包含内容,能够实时反映被包含文件的变化。
696

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



