天天看點

Javaweb項目中的路徑問題

最近在完成一個作業的時候,需要讀取一個在javaWeb的項目中的XML檔案。老是弄不好,便去網上找了方法,有用!一開始也沒深究,完成了作業後,有精力深究了一下。如今寫出來,供大家參考。

Javaweb項目中的路徑問題

我的項目目錄如圖所示,我使用的是Tomcat 8.0作為伺服器,servlet 3.0

首先考慮在普通java類當中擷取UserList.xml的路徑,首先要了解兩個基本知識:

System.out.println(new File("/").getAbsolutePath());//E:\
System.out.println(new File(".").getAbsolutePath());//E:\javaee項目\ContactListB\.
           

“/”代表了目前項目路徑的根目錄,就好比上面代碼所示,我的workspace是在E:\javaee項目,是以在普通java類當中就定位在根目錄所在位置---E:/.

"."代表了目前項目位置,相對于java指令運作目錄。這不難得到,就是E:\javaee項目\ContactListB\.。也就是說列印“.”的絕對路徑,得到的就是java指令運作目錄!我們可以做個實驗

Javaweb項目中的路徑問題

這是我們的實驗目錄,我們可以看到有個名為“00.txt”的檔案在extractWord的目錄下,我們在Eclipse中可以通過“./00.txt”或者“00.txt”進行通路(最好加上“.”),那麼如果我們進入指令行會怎樣呢?

Javaweb項目中的路徑問題

我們可以看到,通路不到路徑。這是因為,在指令行下,java預設指令運作目錄(因為該目錄下面存放了我們編譯好的.class檔案)為:

E:\javaee項目\extractWord\bin
           

而不是先前我們在eclipse下面所看到的 E:\javaee項目\ContactListB\ . 

現在我們設定classpath,将classpath設定為E:\javaee項目\extractWord\bin後,再去運作

Javaweb項目中的路徑問題

如圖所示我們又可以得到在Eclipse下面得到的路徑了,這就是java 指令運作目錄。而我們可以得出Eclipse幫助我們set classpath了,是以我們才會在cmd上得到的結果與Eclipse上不一樣。這就是-java指令目錄的意思。

接下來我們回到最初的問題,如果在普通java類當中,獲得想要的檔案路徑呢?知道“.”的意思之後,再加上想對應的路徑,就可以輕松擷取檔案了。

那麼,如何在Servlet當中,擷取javaweb項目當中的檔案路徑呢?衆所周知,Servlet的程式是放入伺服器中運作的,而

給伺服器使用的:   / 表示在目前web應用的根目錄(webRoot下),意思就是如果想要進去WebRoot目錄,就是”/WebRoot”就行了
           
給浏覽器使用的: /  表示在webapps的根目錄下
           

而在servlet 3.0使用注釋代替了web.xml,使得不用寫xml檔案就可以運作servlet,是以我們不用将javaWeb項目拷貝紙TomCat的Webapps下面,也可以直接運作,(可以放,也可以不放)

System.out.println(new File(".").getAbsolutePath());
System.out.println(new File("/").getAbsolutePath());
System.out.println(this.getServletContext().getRealPath(""));
           

在servlet上面運作如上代碼,得到如下結果:

D:\Eclipse\eclipse-jee-neon-R-win32-x86_64\eclipse\.
D:\
E:\javaee項目\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyFirstJaveProject\
           

如果我們使用“ .”或者"/",得到的都是eclipse軟體路徑和eclipse軟體所在的根目錄。

可以看到第三個方法this.getServletContext().getRealPath(""),

這個方法就是得到ServletContext的路徑,而ServletContext是對于一個項目的全文,是一個唯一路徑。可以看出如果我們不将JavaWeb項目拷貝到TomCat伺服器下面,Eclipse會自動在Workspace下面相應的檔案下建立一個名為wtpwebapps的檔案夾,這個檔案夾的作用就相當于TomCat伺服器下面的webapps,是以我們就找到了相對應的檔案路徑

對于在src下面的資源檔案,在wtpwebapps(webapps)下面的classes檔案夾裡面
對于在其他檔案下面的資源檔案,根據标準的WEB項目檔案去找即可
           

<hr>

類檔案路徑的擷取:

System.out.println("類檔案路徑:"+testPath.class.getResource("/"));
System.out.println("類檔案路徑:"+testPath.class.getResource("."));
           

結果如圖所示:

Javaweb項目中的路徑問題

使用“/”擷取到的路徑是的最末端是bin目錄