2009-07-16 116 views
1

我寫了一些代碼來讀取我的Java Servlet類中的文件。 (我在Tom上使用Windows上的Netbeans服務器)。但是,我的servlet找不到該文件!從Java Servlet讀取文件

經過多次挖掘,我發現我必須將我想要讀取的文件放在Tomcat/bin文件夾中。這非常令人驚訝。我怎樣才能獲得我的Webapps /文件夾的路徑?假設我的網站項目名爲「Web1」。

基本上,我正在做的是我試圖讀取我的.xsl文件,將我的DOM文檔轉換爲HTML。起初,我嘗試將這個.xsl文件放在任何地方(與我的index.jsp處於同一級別,與我的servlet類文件位於同一目錄中,但根本沒有任何作用)

此外,當我完成transform(),我的HTML文件也會進入Tomcat/bin文件夾〜!

回答

5

你可以使用javax.servlet.ServletContext.getRealPath(String path)嗎?

返回包含給定虛擬路徑的真實路徑的字符串。例如,路徑「/index.html」返回服務器文件系統上的絕對文件路徑將由「http://host/contextPath/index.html」請求提供服務,其中contextPath是此ServletContext的上下文路徑。 返回的真實路徑將位於一種適合運行servlet容器的計算機和操作系統的形式,包括適當的路徑分隔符。如果servlet容器由於某種原因無法將虛擬路徑轉換爲真實路徑(例如,從.war歸檔中使內容可用時),則此方法返回null。

+0

你建議的技術工作......雖然我想知道是否有辦法獲得相對路徑。 – sivabudh 2009-07-17 00:45:13

0

您在哪裏使用XSL?如果來自Java代碼,則將該文件放入src/java/resources中,以便在組裝WAR /WEB-INF/classes/foo.xsl時結束於類路徑的頂部。然後,您可以使用Class#getResource(「foo.xsl」),如果您使用DOM4J或更高版本,則可以使用類似方法來加載文件。 現在,如果它是你的JavaScript在客戶端執行,這是一個不同的故事

0

像這樣的事情可能對你更方便的轉型:

java.net.URL url = ClassLoader.getSystemResource(file_name); 
    try { 
     InputStream is = url.openStream()); 
     //Read the file and do stuff 
    } catch(IOException e) { 
     System.err.println("Error: could not load the file"); 
    } 

這將讓你得到一個InputStream的文件在類路徑中(在你的情況下,在webapps文件夾中)。至於寫作結果,我不確定。