Tomcat:找到资源的正确方法?
问题描述:
我正在开发部署在Tomcat服务器上的大型应用程序。只有一个.jsp页面,所有的UI都使用ext-js完成。Tomcat:找到资源的正确方法?
有很多.java类。在其中一个类中(正在执行验证),我想添加XML验证并执行此操作,我需要访问.xsd文件。
我的问题是,我不知道如何干净地找到我的.xsd文件的路径。
我把xsd文件的剧目旁边的CSS /,图像/等
我知道如何在这一个蹩脚的方式:我叫System.getProperty(“的user.home “)并从那里我找到我的web应用程序,xsd/文件夹和.xsd文件。
但是,干净的方法是什么?
我应该在哪里找到我的webapp(或我的webapp资源)的路径,以及如何将这些信息传递给执行验证的类.java?
答
对于公共网页内容中的文件,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);
非常感谢:假设它被放置在包
com.example.resources
,您可以从classpath如下加载它。在第二种情况下,将文件放在类路径中是否是一种好的做法? (我可能会遇到一个关于如何执行此操作的新问题) – Gugussee 2011-02-16 09:36:20