2011-02-15 103 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