【发布时间】:2011-06-04 17:05:49
【问题描述】:
我正在 java 上编写一个简单的 Web 服务,它应该读取一个 xml 文件并为结果生成一个字符串。然而,我不知所措:
a) xml 文件应该放在文件系统的什么位置,以便 Web 服务可以访问它?
b) 从服务到文件的相对方式是什么
c) 或者,我如何将 xml 文件添加到项目中,以便将其与 Web 服务一起部署
我使用 NetBeans 作为 IDE,使用 maven 作为构建系统。
【问题讨论】:
我正在 java 上编写一个简单的 Web 服务,它应该读取一个 xml 文件并为结果生成一个字符串。然而,我不知所措:
a) xml 文件应该放在文件系统的什么位置,以便 Web 服务可以访问它?
b) 从服务到文件的相对方式是什么
c) 或者,我如何将 xml 文件添加到项目中,以便将其与 Web 服务一起部署
我使用 NetBeans 作为 IDE,使用 maven 作为构建系统。
【问题讨论】:
通常我会在我的 Web 应用程序中提供一个资源包 (.jar)。如果在运行时不应该修改文件,这应该是访问它的最佳方式。这将是 c) 在您的问题中。您可以通过以下方式访问该文件:
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("resourceName");
"resourceName" 将是 jar 文件中的路径。如果您使用 Maven 打包,src/main/webapp/WEB-INF/classes 中的所有内容都将在您的类路径中可用,并且可以使用 getResourceAsStream 加载。
使用 maven 的另一种方法是创建一个新模块并将所有必需的资源放在 src/main/resources 中,然后在您的 webapp pom 中添加对该工件的依赖项。
【讨论】:
a) 任何地方,只要您的进程有权访问该文件。
b) 相对路径取决于您使用的应用服务器。相对路径是相对于 jvm 的 home 的。 tomcat 是 tomcat-base,weblogic 是 域目录。我建议不要依赖于此,而是使用包含绝对路径的配置参数。
c) 把它放在 WEB-INF (servletcontext path) 或 WEB-INF/classes (你可以作为类路径资源访问)
【讨论】: