include指令


include指令

CreateTime--2017年8月10日08:40:25

Author:Marydon

1.為什么要使用?

  使用include指令可以方便的把在多個頁面中要重復顯示的內容抽取出來,大大的減少代碼的重復量,方便我們對重復內容的維護

include指令分為:靜態include指令和動態include指令

2.使用靜態include指令引入頁面

  說明:

    在JSP中插入一個或多個包含文件或代碼的文件(jsp,html,inc,txt),把文件插入后與原來的JSP文件合並成一個新的JSP頁面

  語法:

    <%@ include file="從頁面文件地址" %>

  解說:

    該指令只有一個屬性:file,指定被包含的文件地址,一般使用相對路徑,並且不支持任何表達式(小腳本、EL表達式)

  舉例:

<%@include file="../../common/patient_baseInfo.jsp"%>

  注意:

    1.1 當從頁面的內容發生變化時,主頁面和從頁面(所有頁面)都會被重新編譯,即他們是一個整體;

      反之,主頁面內容發生更改(手動修改jsp頁面而不是通過js控制改變頁面內容)時,所有頁面也都會被重新編譯,即牽一發而動全身,

      從這個角度而言,跟主頁面和從頁面的內容在同一頁面上沒有不同;

    1.2 主頁面和從頁面上聲明的Java變量或方法必須具有唯一性;

      jsp會被轉化成Java文件,使用靜態include指令,多個jsp(從頁面)會先合並到主jsp頁面上,然后再轉換成Java文件,

      如果合並后的頁面上有2個及以上相同的變量名或完全一樣的方法,這種錯誤如果在編輯時沒有報錯,但在將jsp文件轉化成Java文件時,仍會報錯。

    1.3 這種方式在引入從頁面時,不能夠傳參數給從頁面;

3.使用動態include指令引入頁面

  說明:

     在JSP中引用一個或多個包含文件或代碼的文件(jsp,html,inc,txt),從頁面內容和主頁面仍然具有很強的獨立性

  語法:

    a.不傳參數

    <jsp:include page="<%=request.getParameter("path") %>|path|${param.path }" flush="true|false" />

    b.傳遞參數    

    <jsp:include page="<%=request.getParameter("path") %>|path|${param.path }" flush="true|false">
      <jsp:param value="參數內容" name="參數名稱"/>
      ...可以向包含頁面傳遞多個參數
    </jsp:include>

  解說:

    a.page屬性的值可以是死值(具體頁面),也可以是小腳本、EL表達式(動態頁面);

    b.flush屬性表示設置是否在緩沖區滿了就將內容輸出。可選值有true和false,默認值為true。

  舉例:

<!-- 引入患者醫囑信息頁面並傳參 -->
<jsp:include page="../../common/patient_yzInfo.jsp">
    <jsp:param value="zhuYuan" name="treatmentType"/>
</jsp:include>

  注意:

    2.1 當主頁面或從頁面內容發生變化時,其他頁面不需要重新編譯;

      使用動態include指令,主頁面和被引入的從頁面都會被獨立編譯,編譯成Java文件后,當主頁所在的class文件被一行行執行遇到該標識時,

      程序會將請求轉發到被包含的頁面,並將執行結果輸出到瀏覽器中,然后返回主頁面繼續執行后面的代碼,相當於東拼西湊而形成的頁面

    2.2 主頁面和從頁面上聲明的Java變量或方法可以一樣;

      由於每個文件是單獨編譯的,所以在被包含文件和包含文件中重名的變量和方法是不相沖突的。

    2.3 這種方式在引入從頁面時,可以向從頁面傳遞一個或多個參數。

      主頁向從其中一個頁面傳遞的參數,只有該從頁面能獲取到該參數,即:從頁面之間的參數不共享

4.圖例

  4.1 主頁面里分別用了兩種不同的方式引入對應的頁面

    使用動態include指令引入patient_baseInfo.jsp

    使用靜態include指令引入patient_bcInfo.jsp

    common目錄中包含這兩個文件

   3.2 訪問主頁面時,產生的編譯文件

    使用動態include指令,頁面編譯結果:

   

    使用靜態include指令,頁面編譯結果:

 

5.其他注意事項

  不管是一開始就合並成一個頁面的還是最后才拼裝成的頁面,就最終結果而言,它們都在同一個頁面上(即主頁面),所以:

  5.1 頁面的id要保持唯一性,當主頁面與從頁面分離時,容易忽略這一點;

  5.2 盡量不要在從頁面設置隱藏域,不便於發現,能提取到主頁面的就放到主頁面,便於維護;

  5.3 由於一個頁面對應js只能使用一個window.onload=function(){}函數,所以強制要求,

    主頁面的js文件使用window.onload=function(){}函數,其他從頁面的js文件使用$(function(){})

  5.4 從頁面想要引用的js文件在哪個地方聲明引用合適?

  推薦位置:從頁面想要引用的js文件,放到主頁面來引用,放到最后一個include下面

  舉例:

    如果從頁面間共用一個js文件,顯然,在每個從頁面上引用一次不是明智之舉,該js文件會被加在多次;

    如果從頁面引用的js文件各不相同,從頁面上可以直接引用js文件;

    如果從頁面想要在主頁面加載完畢后執行一些操作,要聲明引用的位置,必須是在主頁面的body閉合標簽上面;

    。。。

6.常被抽出來的代碼

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<fmt:requestEncoding value="utf-8" />
<script type="text/javascript">var baseUrl="<%=request.getContextPath()%>"</script>

UpdateTime--2018年4月14日16:34:59

7.引用路徑問題  

  在eclipse開發工具下,如果引入的文件路徑"../"不小心多加了幾個,沒有問題,頁面不會報錯,

  而且在Tomcat下發布可以正常訪問到該頁面,但是在webLogic下就可能會出現問題了:找不到該頁面

  原因:

  在Tomcat下,項目的根路徑名稱為twrs,即項目該項目外面沒有父文件夾,所以就算你多加幾個../,依然能夠找到該文件;

  但是,在webLogic下發布程序時,twrs的上級目錄是data,所以這個時候就去data或data的上級目錄下去找這個文件,當然找不到;

  所以,馬虎不得,該是幾個"../",就寫幾個。

 

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM