Servlet高級應用——Include命令

一、方式1
對於頁面的公共部分,我們可以使用相同的jsp文件,並使用include指令導入,如此實現代碼的優化。
告訴容器,在將.jsp文件轉換成.java文件時,在指令所在的位置插入相應的文件的“內容“。插入的頁面並未運行,而是機械的將內容

     <%@include file="footer.jsp" %>

注:此時引入的是靜態的jsp文件,它將引入的jsp中的源代碼原封不動地附加到當前文件中,所以在jsp程序中使用這個指令的時候file裏面的值(即要導入的文件)不能帶多餘的標籤或是與當前jsp文件重複的東西。例如裏面不要包含<html><body>這樣的標籤,因爲是把源代碼原封不動的附加過來,所以會與當前的jsp中的這樣的標籤重複導致出錯

二、方式2

<jsp:include page=”/user/test”flush=”true”/>

此時引入執行頁面或生成的應答文本.jsp:include標籤導入一個重用文件的時候,這個文件是經過編譯.

 flush 表示在讀入包含內容之前是否清空任何現有的緩衝區。

注: 通俗點說就是附加這個要導入文件經過編譯後的效果,所以可以含有與當前jsp程序中重複的內容,因爲在附加過來之前就會被解析掉。

區別

include

jsp:include

執行時間

翻譯階段

在請求處理階段執行

引入的內容

引入靜態文本,先包含,後編譯

引入執行頁面或servlet所生成的應答文本. 被包含的文件先編譯,後包含進來,然後顯示

三、實際應用中的引用時的路徑問題

相對路徑

不以"/"開頭的路徑。

方式1  硬編碼形式-

  <a href="../a2.jsp">點擊訪問a2.jsp</a> <!-- ../ 的用法爲:向上跳一級 -->

  注:相對路徑較易出錯,在實際開發中建議使用絕對路徑。

方式2  防止硬編碼

使用String request.getContextPath()方法來即時獲取應用

<%String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>

<head>

    <base href="<%=basePath%>">

</head>

 

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