Java Web 回顧總結(六) - jsp - 指令 - Include 指令

include指令

語法:

<%@ include %>
< jsp:include > 

@include指令 – 在翻譯階段執行

  @include可以包含任意的文件,但只把文件的內容包含進來。

include指令引入通常也稱之爲靜態引入
如果使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP 合併翻譯成一個servlet

使用:

<%@ include file="relativeURL"%>其中的file屬性用於指定被引入文件的路徑。

路徑以/開頭,表示代表當前web應用。

注意問題:
1. 被引入的文件必須遵循JSP語法。
2. 被引入的文件可以使用任意的擴展名,即使其擴展名是html

JSP引擎也會按照處理jsp頁面的方式(標籤元素)處理它裏面的內容
JSP規範建議使用.jspfJSP 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.jspffoot.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程序中重複的內容,(在包含過來之前就會被解析掉)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章