jsp/html頁面中的路徑


Html/Jsp頁面中的路徑,是供瀏覽器使用的。“/”代表的是服務器根目錄,一個服務器會有多個web應用,所以請求資源時需要加應用名才能正確訪問。

頁面中使用的相對路徑,也是由瀏覽器根據當前頁面的url或<base>元素解析成完整請求路徑的。

頁面中使用路徑的常用方式如下:

1.當前應用的根路徑+靜態資源的相對路徑:

<link type="stylesheet" href="${pageContext.request.contextPath}/satic/ css/common.css">
<form action="${pageContext.request.contextPath}/servlet/login" method="post">

瀏覽器解析時會將”/”解析為服務器。如果不加當前應用的根路徑,有可能會錯誤地把static當作應用名,取決於部署時path的設置。所以最好統一添加應用的根路徑。

獲取當前應用的根路徑:

  EL表達式:${pageContext.request.contextPath};  

  JSP:<% =request.getContextPath() %>

若工程文件就是在根目錄下,通過request.getContextPath()返回的字符串為空。

 

2.當前應用的絕對路徑+靜態資源的相對路徑:

<%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
  String appContext= request.getContextPath();//  獲取當前應用的根路徑構建當前應用的絕對路徑(/appName)
  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + appContext ;
  // 將basePath存入pageContext中,將來用EL表達式讀取
  pageContext.setAttribute("basePath",basePath);
%>
<html>
    <body>
        <a href="${pageScope.basePath}/jsp/login.jsp">
    </body>
</html>

缺點:每個請求前都要加${pageScope.basePath}

 

3.利用<base>標簽

默認情況下,頁面中相對路徑的請求都是相對於當前頁面的url發出的;如果當前頁面存在<base>標簽,則請求是相對<base>中設定的值。

<%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
    String appContext= request.getContextPath();// 獲得當前應用的根路徑
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + appContext ;
%>
<html>
    <head>
       <base href="<%=basePath%>">      <!--設定base標簽-->
    </head>
    <body>
        <a href="/jsp/login.jsp">Login</a>
    </body>
</html>

缺點: 對於被包含的文件依然無效。

 

Servlet內所有的路徑都要用絕對路徑,即以”/”開頭,代表當前的web應用。

req.getRequestDispatcher("/pages/login.jsp").forward(req, resp);轉發路徑中”/”代表當前應用。   


免責聲明!

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



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