Java的絕對路徑和相對路徑


Java的絕對路徑和相對路徑

參考:http://blog.csdn.net/u011225629/article/details/46872775

1. 絕對路徑

以根部件開始的路徑是絕對路徑,比如/(Linux系統中)或者C:\(Windows系統中)。
默認文件系統的路徑分隔符,類Unix文件系統是/,Windows是\
其實就是在硬盤上真正的路徑,(URL和物理路徑)例如:
C:\xyz\test.txt 代表了test.txt文件的絕對路徑。http://www.sun.com/index.htm也代表了一個URL絕對路徑。

2. 相對路徑

相對路徑:相對於某個基准目錄的路徑。包含Web的相對路徑(HTML中的相對目錄),例如:在Servlet中,”/”代表Web應用的根目錄,”./” 代表當前目錄,“../”代表上級目錄。

3. java中的應用

歸根結底,Java本質上只能使用絕對路徑來尋找資源。所有的相對路徑尋找資源的方法,都不過是API在底層幫助我們構建了絕對路徑,從而找到資源的!

3.1 request.getContextPath()

<%=request.getContextPath()%>是為了解決相對路徑的問題,可返回站點的根路徑或者叫根目錄,分為兩種情況:

  1. 將web項目中的webRoot下的文件直接拷貝到webapps/ROOT下(刪除ROOT下的原有文件);
  2. 在Tomcat下的webapps中創建以項目名稱命名(當然也可以用其他的名稱)的文件夾,並將webRoot下的文件直接拷貝到該文件夾下。
    對於第一部署方法,request.getContextPath()的返回值為空(即:"",中間無空格,注意區分null)。
    對於第二部署方法,其返回值為:/創建的文件夾的名稱。

對於第1種方法,當你直接在瀏覽器中輸入你的服務器ip+端口號,就會到你的jsp頁面,而不是tomcat的默認頁面,所以你通過request.getContextPath()得到的字符串是為空字符串;
如果你想得到工程文件的實際物理路徑,可通過:<%=request.getRealPath("/")%>。
效果:

<%

String path = request.getContextPath();

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

%>

path: /jspSmartUpLoad

basePath: http://yangm1203.oicp.net:8080/jspSmartUpLoad/

request.getScheme(): http

request.getServerName(): yangm1203.oicp.net

request.getServerPort(): 8080

實際應用中,一般用來解決jsp測試和生產環境路徑不同的問題
request.getScheme();
返回的協議名稱,默認是http。對於ssl則返回"https"

request.getServerName()
返回的是服務器域名,如果是在本地的話就是localhost

getServerPort()
獲取服務器端口號

比如<a href="<%=request.getContextPath()%>/catalog.jsp">,但當這兩個文件是在同一個目錄下時,也可以直接用<a href="catalog.jsp">
比如你要生成一個文件放在服務器上的一個目錄下,可以使用request.getContextPath()+/dir,組成一個完整得目錄結構!

注意在velocity中的寫法可能要改為

$!{request.getContextPath()}

一些常用的獲取項目根目錄寫法:

在jsp里去<%=request.getContextPath()%>這就是項目的根路徑了。
js的引入方法如下:
<script src="<%=request.getContextPath() %> /home/test.js"></script>
css的引入方法:
<link href="<%=request.getContextPath() %>/css/one.css" rel="stylesheet" type="text/css">

3.2 Classpath:

指定類搜索路徑。即用來告訴編譯器導入的包或者類所在路徑。
比如我們安裝JDK的配置:

Classpath:

.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;

分別表示當前目錄,即自己的java類路徑;jdk自帶的標准類庫路徑。

JAVA_HOME

C:\Program Files\Java\jdk1.8.0_77

設置jdk的安裝路徑。

3.3 request.getRealPath()

用來獲得絕對路徑

  • request.getRealPath("/");//不推薦使用獲取工程的根路徑
  • request.getRealPath(request.getRequestURI());//獲取jsp的路徑,這個方法比較好用,可以直接在servlet和jsp中使用
  • this.getClass().getClassLoader().getResource("").getPath();//獲取工程classes 下的路徑,這個方法可以在任意jsp,servlet,java文件中使用,因為不管是jsp,servlet其實都是java程序,都是一個 class。所以它應該是一個通用的方法。

4. 相對路徑的幾種使用情況

1.若引用的資源和本身在同一路徑下(既在同一目錄下),直接:

<img src="tupian.gif" border="0"/> 

2.要引用的文件在下一級文件夾下,文件名前加子文件夾名稱

假設info.html路徑是:c:\Inetpub\wwwroot\sites\blabla\info.html 
假設index.html路徑是:c:\Inetpub\wwwroot\sites\blabla\html\tutorials\index.html 
在info.html加入index.html超鏈接的href應該這樣寫:html/tutorials/index.html 

3.要引用的文件在上一級文件夾下,文件名前加../

假設info.html路徑是:c:\Inetpub\wwwroot\sites\blabla\info.html 
假設index.html路徑是:c:\Inetpub\wwwroot\sites\index.html 
在info.html加入index.html超鏈接的代碼應該這樣寫: 
<a href="../index.html">index.html</a> 

舉一反三: ../表示源文件所在目錄的上一級目錄,../../表示源文件所在目錄的上上級目錄,以此類推

4.更復雜的情況:

假設info.html路徑是:c:\Inetpub\wwwroot\sites\blabla\info.html 
假設index.html路徑是:c:\Inetpub\wwwroot\sites\html\index.html 
在info.html加入index.html超鏈接的代碼應該這樣寫:<a href="../html/index.html">index.html</a> 

5.最后一個例子

假設路徑:D:\例子\html\style\view\pop.css 
D:\例子\html\images\view\tupian.gif  
在css中引用這個圖片:<img src="../../images/view/tupian.gif" border="0"/> 

在JSP/HTML等頁面引用CSS,Javascript.Action等屬性時,前面可以加上< %=request.getContextPath()%>,以確保所引用的文件都屬於Web應用所在目錄。因為當使用類似”.”,”./”,”../../”等相對路徑時,文件移動很容易出問題,但對於目錄結構不變的應用影響不大。


免責聲明!

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



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