java - 如何在java EE中获取Web项目的根路径

标签 java path

我正在将 Java EE 用于我的动态 Web 项目。我将 sitemap.xml 文件放在根路径中。 现在我需要该文件的路径进行修改。我尝试:

String path = getClass().getClassLoader().getResource(".").getPath() +"\\sitemap.xml";

但是系统找不到指定的文件。 我使用的是window,当我将项目上传到linux主机时,我需要更改什么?

最佳答案

ClassLoader#getResource() 只能查找类路径资源,而不是 Web 资源。 sitemap.xml 显然是一个 Web 资源。您应该使用ServletContext#getResource()相反,或其 JSF 对应项 ExternalContext#getResource() — 正如您的问题历史记录所示,您正在使用 JSF。

URL url = externalContext.getResource("/sitemap.xml");

或者,仅供阅读:

InputStream input = externalContext.getResourceAsStream("/sitemap.xml");

通常,您根本不应该对正在使用的实际磁盘文件系统路径感兴趣。这通常是临时文件夹位置,甚至是内存中的位置。

<小时/>

与具体问题无关,写它是一个完整的故事。类路径资源和 Web 资源都不可从 Java EE 应用程序内部写入。即使这是可能的(即它不是内存中的资源),每当您重新部署 WAR 或什至重新启动服务器时,所有更改都会完全丢失,原因很简单,这些更改不会反射(reflect)在原始版本中WAR 文件。鉴于“sitemap.xml”的具体文件名,我的印象是您打算进行更永久的存储。在这种情况下,我强烈建议寻找不同的解决方案。例如。将文件存储在 WAR 之外的固定路径中,或者只是数据库中的数据结构。

关于java - 如何在java EE中获取Web项目的根路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284112/

相关文章:

powershell - 变量路径

java - 如何编写Java文件路径

java - 在 Java 中解析 JSON 字符串

java - 扫描仪双值 - InputMismatchException

java - myEclipse 首选项没有 Maven 选项

batch-file - cmd PATH 错误 -\common 此时是意外的

java - Apache HttpClient 4.5.5 - GET 请求后响应的 header 错误

java - 使用jlabel在java中显示数学方程式

path - 如何在 g++ 中包含库的路径

delphi - Delphi中如何从绝对路径获取文件URL?