include
指令
语法:
<%@ include %>
< jsp:include >
@include
指令 – 在翻译阶段执行
@include
可以包含任意的文件,但只把文件的内容包含进来。
-
include
指令引入通常也称之为 静态引入。 -
如果使用
include
指令引入了其它JSP
页面,那么JSP
引擎将把这两个JSP
合并翻译成一个servlet
。
使用:
<%@ 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
程序中重复的内容,(在包含过来之前就会被解析掉)