2011-02-15 99 views
3

我正在開發部署在Tomcat服務器上的大型應用程序。只有一個.jsp頁面,所有的UI都使用ext-js完成。Tomcat:找到資源的正確方法?

有很多.java類。在其中一個類中(正在執行驗證),我想添加XML驗證並執行此操作,我需要訪問.xsd文件。

我的問題是,我不知道如何幹淨地找到我的.xsd文件的路徑。

我把xsd文件的劇目旁邊的CSS /,圖像/等

我知道如何在這一個蹩腳的方式:我叫System.getProperty(「的user.home 「)並從那裏我找到我的web應用程序,xsd/文件夾和.xsd文件。

但是,乾淨的方法是什麼?

我應該在哪裏找到我的webapp(或我的webapp資源)的路徑,以及如何將這些信息傳遞給執行驗證的類.java

回答

10

對於公共網頁內容中的文件,ServletContext#getRealPath()的確是要走的路。

String relativeWebPath = "/path/to/file.xsd"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
File file = new File(absoluteDiskPath); 
// ... 

但是,我不能想象有過意向,以服務XSD文件到公衆和也是一個需要的XSD似乎並沒有成爲一個servlet的Java類。所以,我建議只將XSD文件放在類路徑中,然後從那裏抓取。在Tomcat中

String classpathLocation = "com/example/resources/file.xsd"; 
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation); 
// Or: 
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation); 
+0

非常感謝:假設它被放置在包com.example.resources,您可以從classpath如下加載它。在第二種情況下,將文件放在類路徑中是否是一種好的做法? (我可能會遇到一個關於如何執行此操作的新問題) – Gugussee 2011-02-16 09:36:20

1

getServletContext().getRealPath("/")是你需要的。

請參閱here

+0

不工作 – momomo 2013-04-11 16:27:19