Tomcat:找到资源的正确方法?

时间:2011-02-15 17:57:43

标签: java tomcat resources path

我正在研究部署在Tomcat服务器上的大型应用程序。只有一个.jsp页面,所有UI都是使用ext-js完成的。

有很多.java类。在其中一个类(执行验证)中,我想添加XML验证,为此我需要访问 .xsd 文件。

我的问题是我不知道如何干净地找到我的.xsd文件的路径。

我将把.xsd文件放在css /,images /等旁边的一个剧目中。

我以蹩脚的方式知道如何:我调用 System.getProperty(“user.home”),然后从那里找到我的webapp, xsd / 文件夹和 .xsd 文件。

但这样做的“干净”方式是什么?

我应该在哪里找到我的webapp(或我的webapp资源)的路径,以及我应该如何将这些信息传递给执行验证的 .java 类?

2 个答案:

答案 0 :(得分:12)

对于公共网页内容中的文件,ServletContext#getRealPath()确实是可行的方法。

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

但是,我无法想象有意将XSD文件提供给公共,并且需要XSD的Java类似乎不是servlet。所以,我建议只将XSD文件放在类路径中,然后从那里抓取。假设它已被放置在包com.example.resources中,您可以从类路径加载它,如下所示:

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

答案 1 :(得分:1)

getServletContext().getRealPath("/")就是您所需要的。

请参阅here