我正在研究部署在Tomcat服务器上的大型应用程序。只有一个.jsp页面,所有UI都是使用ext-js完成的。
有很多.java类。在其中一个类(执行验证)中,我想添加XML验证,为此我需要访问 .xsd 文件。
我的问题是我不知道如何干净地找到我的.xsd文件的路径。
我将把.xsd文件放在css /,images /等旁边的一个剧目中。
我以蹩脚的方式知道如何:我调用 System.getProperty(“user.home”),然后从那里找到我的webapp, xsd / 文件夹和 .xsd 文件。
但这样做的“干净”方式是什么?
我应该在哪里找到我的webapp(或我的webapp资源)的路径,以及我应该如何将这些信息传递给执行验证的 .java 类?
答案 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。