jsp文件引用路徑的問題

一.問題
1。採用相對路徑的問題
        如果採用請求轉發返回頁面,那麼由於頁面路徑與請求路徑不同,使得瀏覽器無法正確解釋頁面中的路徑,如頁面爲/pages /cust/cust.jsp,圖片所有目錄爲/images/title.gif,這時在/pages/cust/cust.jsp中的所用的路徑爲”../../images/title.gif”,但是如果某一個請求的路徑指向這個JSP文件,而這個請求的路徑爲 /cust/manage.do,那麼頁面內容中”../../images/title.gif”就不再指向正確的路徑了。
解決以上問題似乎只有使用絕對路徑。
2。採用絕對路徑遇到的問題
        a)隨着不同的Web應用發佈方式,絕對路徑的值也不同。如Web應用發佈爲MyApp,則路徑”/MyApp/images/title.gif”是正確的,但發佈爲另一應用時如MyApp2,這個路徑就不對了,也許這個情況比較少,但以default方式發佈Web應用時以上絕對路徑也不同:”/images/title.gif”。
 

二.解決方案
1)採用絕對路徑,但爲了解決不同部署方式的差別,在所有的文件路徑前加${pageContext.request.contextPath},如原路徑爲:
”/images/title.gif”,改爲“${pageContext.request.contextPath}/images/title.gif”。
代碼” ${pageContext.request.contextPath}”的作用是取出部署的程序名,這樣不管如何部署,所用路徑都是正確的。
缺點:
操作不便,其他工具無法正確解釋${pageContext.request.contextPath}
2) 採用相對路徑,在每個JSP文件中加入base標籤,這樣所有的路徑都可以使用相對路徑。
缺點:
對於被包含的文件依然無效。
    真正使用時需要靈活應用1)和2),寫出更加健壯的代碼。
 

在使用的時候可以使用${pageContext.request.contextPath},同時也可以在jsp頁面中添加base,可用相對路徑:

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

     

然後在<head>標籤內添加base

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

在本頁面中“直接”引入外部文件時,可直接

  1. <script src="js/common/jquery-1.11.1.min.js" language="javascript"
    type="text/javascript"></script>
    <script src="js/common/frame.js" language="javascript"
    type="text/javascript"></script>
    <link href="css/common/frame.css"
    rel="stylesheet" type="text/css" />
    <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />

     

同理,本頁面中的css類

  1. .top {
    position: absolute;
    left: 0;
    top: 95px;
    right: 0;
    height: 120px;
    background: url(images/common/title.jpg) repeat-x
    }

     

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