2010-08-29 115 views
5

我正在在Eclipse(JSP)的Web應用程序,並使用Tomcat作爲服務器(集成到Eclipse)。我必須創建下面的對象並指定配置文件的路徑。這絕對路徑工作很好:絕對相對路徑(Eclipse中,JSP)

Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl"); 

但是我想知道爲什麼我不能使用相對路徑。是否應該是"config/sdb.ttl"(如果項目名稱是根)?但它不能以這種方式找到它(NotFoundException)。

回答

5

相對磁盤文件系統的路徑是相對於這取決於你如何啓動該應用程序(在Eclipse這將是該項目的文件夾,在命令控制檯這將是當前打開的文件夾中的當前工作目錄,在Tomcat管理/服務它將是Tomacat/bin文件夾等)。你無法從Java代碼中控制它,所以忘掉它吧。

在JSP/Servlet中,您可以使用ServletContext#getRealPath()將相對Web內容路徑(其根目錄位於公共web內容,在您的案例中爲/WebContent文件夾)轉換爲絕對磁盤文件系統路徑。所以:

String relativeWebPath = "/config/sdb.ttl"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Store store = StoreFactory.create(absoluteDiskPath); 
// ... 

ServletContext是由繼承getServletContext()方法的servlet可用。

+0

我創造在位於src文件夾一類這個存儲對象。由於這不是JSP/Servlet,我不能使用getServletContext()方法。在JSP中,我實例化這個類,並在其構造器中生成Store對象。任何其他解決辦法? – Aliens 2010-08-29 21:36:19

+0

一個JSP文件是語義上的[錯了地方(http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files)作業。無論如何,因爲JSP文件被編譯成一個servlet,它可以訪問到''用的getServletContext ServletContext'()'爲好。你也可以使用隱含的變量'application'來引用它。即'application.getRealPath(relativeWebPath)'。順便說一下,你是否在說「我不能使用這個方法」之前嘗試**? – BalusC 2010-08-29 22:04:49

+0

嘿。當然,我嘗試了它,但它仍然無法正常工作。我不知道你是否瞭解我。我沒有在JSP中調用getServletContext()。我想在/ src中的.java文件中調用它,但我不能這麼做。這個.java文件是一個類。並且該類在JSP中實例化。 – Aliens 2010-08-29 22:29:12