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
程序中重複的內容,(在包含過來之前就會被解析掉)