2012-05-21 57 views
2

将文件放在Tomcat Servlet应用程序中的位置,以便它们对页面相对可见?Servlet/Tomcat相对文件路径

更多细节: 我同时使用外部库开发的servlet页。该库大量依赖外部加载的XML文件(相对文件路径)。所以我需要将这些XML文件放在servlet的运行目录的中。

Tomcat服务器中有没有办法可以访问文件相对

+1

您可以使用'System.getProperty(“user.dir”)'获取当前工作目录。打印它,你知道在哪里把你的文件... –

+0

从那里,你可以访问整个文件结构。好的评论莫里茨。 – Ewald

+0

是的,我已经完成了simillar的想法,我已经写入该目录中的文件,但它原来是一个临时目录,tomcat创建... – Betamoo

回答

2

当Web应用程序部署到Tomcat,所述web应用程序的根最终被$ CATALINA_HOME/web应用/ YOUR_WEB_APP/

这样,如果使用servlet访问位于内的路径上的XML文件Web应用程序的根目录,你可以使用以下命令:

request.getServletContext().getResourceAsStream("PATH/TO/YOUR/XML_FILE.xml") 

这将加载XML文件作为InputStream。当然,如果要访问该文件本身,可以始终使用getResource(String resource)方法以获得URL,从该File对象可以像这样(替代方法包括)来获得:

File f; 
try { 
    f = new File(url.toURI()); 
} catch(URISyntaxException e) { 
    f = new File(url.getPath()); 
} 

编辑:为了使它们相对于Web浏览器可见,只需将它们放在./WEB-INF和./META-INF目录中。

+0

把我无法访问外部库的代码...我只知道它加载相对路径的文件.. – Betamoo

+0

我想我很困惑。你想做什么?只需使外部库可访问XML文件?如果是这样,你的相对路径就是应用程序根目录。 – Zach

0

如果您正在讨论的这个库将在类路径中搜索文件(如Hibernate或Log4J会这样做),则必须将您的XML文件放入WEB-INF中。不过,我建议你不要手动执行此操作。您可以将该文件放在应用程序的源目录中,这将确保文件部署在正确的位置。

0

这是一个老问题。我正在开发Tomcat 9.我以Tomcat安装目录为基础取得了很大的成功。 (CATALINA_HOME)例如ROOT中文件的相对路径是“webapps/ROOT/someDir/fileName”

抱怨重复答案的地方是处理重复的问题。