天天看點

相對路徑和絕對路徑的區分

寫了好多代碼,可是一直對路徑(java或jsp)有很大的疑惑,今天一邊查閱資料一邊學習一邊總結一些:

1.相對路徑和絕對路徑的差別:

絕對路徑:就是檔案在本地硬碟上的真正路徑即URL和實體路徑;

相對路徑:相對與某個基準目錄的路徑(一般針對web目錄而言,包含Web的相對路徑(HTML中的相對目錄);

servlet中,"/"表示web的根目錄,"./"表示檔案所在的目前目錄,"../"表示目前目錄的上一級目錄;

在網絡中,以http開頭的連結都是絕對路徑,絕對路徑就是你的首頁上的檔案或目錄在硬碟上真正的路徑,絕對路徑一般在CGI程式的路徑配置中經常用到,而在制作網頁中實際很少用到。

2.伺服器端的位址

伺服器端的相對位址指的是相對于你的web應用的位址,這個位址是在伺服器端解析的,不同于html和javascript中的相對位址,它們是由用戶端浏覽器解析的。

forward:servlet中的request.getRequestDispatcher(address);這個address是在伺服器端解析的,是以,你要forward到a.jsp應該這麼寫:request.getRequestDispatcher(“/user/a.jsp”)這個/ 相對于目前的web應用webapp,其絕對位址就是:http://192.168.0.1/webapp/user/a.jsp。 sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

3.用戶端的位址

所有的html頁面中的相對位址都是相對于伺服器根目錄(http://192.168.0.1/)的,而不是(跟目錄下的該Web應用的目錄) http://192.168.0.1/webapp/的。 Html中的form表單的action屬性的位址應該是相對于伺服器根目錄(http://192.168.0.1/)的,是以,如果送出到a.jsp 為:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()% >"/user/a.jsp;

送出到servlet為actiom="/webapp/handleservlet" Javascript也是在用戶端解析的,是以其相對路徑和form表單一樣。

是以,一般情況下,在JSP/HTML頁面等引用的CSS,Javascript.Action等屬性前面最好都加上

<%=request.getContextPath()%>,以確定所引用的檔案都屬于Web應用中的目錄。另外,應該盡量避免使用類似".","./","../../"等類似的相對該檔案位置的相對路徑,這樣當檔案移動時,很容易出問題。

4. JSP/Servlet中獲得目前應用的相對路徑和絕對路徑

4.1 JSP中獲得目前應用的相對路徑和絕對路徑

根目錄所對應的絕對路徑:request.getRequestURI()

檔案的絕對路徑  :application.getRealPath(request.getRequestURI());

目前web應用的絕對路徑 :application.getRealPath("/");

取得請求檔案的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()

4.2 Servlet中獲得目前應用的相對路徑和絕對路徑

根目錄所對應的絕對路徑:request.getServletPath();

檔案的絕對路徑 :request.getSession().getServletContext().getRealPath

(request.getRequestURI())

目前web應用的絕對路徑 :servletConfig.getServletContext().getRealPath("/");

(ServletContext對象獲得幾種方式:

javax.servlet.http.HttpSession.getServletContext()

javax.servlet.jsp.PageContext.getServletContext()

javax.servlet.ServletConfig.getServletContext()

)

5.java 的Class中獲得相對路徑,絕對路徑的方法

5.1單獨的Java類中獲得絕對路徑

根據java.io.File的Doc文擋,可知:

預設情況下new File("/")代表的目錄為:System.getProperty("user.dir")。

6.當用到:System.getProperty("user.dir");擷取目前的工作路徑;當你在main函數中調用此方法時得到是你的工作空間如d:/workplace/項目名 這個路徑 ;如果是頁面中通過控件來調用這個方法則傳回的TOMCAT的路徑 

在檔案操作中,不用/或者\最好,推薦使用File.separator