java - 如何从引用的java项目访问静态资源(WEB-INF)文件夹中的文件?

标签 java spring jakarta-ee maven pom.xml

我有一个 Web 应用程序,它包含一个配置 xml 文件,用于我的一个应用程序服务,该服务公开为 spring bean。 我在同一个工作区中还有一个独立的 Java 应用程序(从它的 pom.xml 引用我的 Web 应用程序项目),它使用 Spring TestContext 框架运行测试,其中一个测试检查该 XML 文件的配置。

但是我在从独立应用程序访问此 xml 文件时遇到问题:

在设置测试之前,在我之前的配置中,该文件是通过 ServletContext 访问的,位于 WEB-INF/ 文件夹中。但是,为了使它可以从测试项目访问,我必须将它移动到 source/ 文件夹并使用 getClassLoader().getResourceAsStream() 方法而不是 ServletContext 方法加载它。但这会使编辑文件变得很麻烦,因为每次都必须重新部署应用程序。

是否可以将文件保存在 WEB-INF/ 文件夹中,但在测试运行期间从引用项目加载它?

附言目前它是一个带有 Tomcat 服务器的 STS 项目。

最佳答案

如果文件应该存放在 WEB-INF/文件夹下,则一定要将其保存在该文件夹下。

用于从命令行执行的测试类。您可以对您知道位于类路径根目录中的文件(例如 application.properties 文件)使用 getClassLoader().getResource()。从那里您知道项目的结构以及在哪里可以找到与属性文件相关的 WEB-INF/。由于它会返回一个 URL,因此您可以使用它来找出您要查找的 XML 文件的路径。

URL url = this.getClass().getClassLoader().getResource("application.properties");
System.out.println(url.getPath());

File file = new File(url.getFile());
System.out.println(file);

// now use the Files' path to obtain references to your WEB-INF folder

希望您觉得这很有用。我不得不对您的测试类如何运行等做出假设。

看看 File Class getPath()、getAbsolutePath() 和 getParent() 方法可能对您有用。

关于java - 如何从引用的java项目访问静态资源(WEB-INF)文件夹中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638790/

相关文章:

java - JAX-RS:如何在发送响应之前拦截 json 消息体?

Java FileInputStream 限制为 65535 字节

java - 使 Spring 测试方法不是事务性的

java - 如何处理 Java 中的 StackOverflowError?

java - 如何在不使用 Session 的情况下在 Spring 中将对象从一个 Controller 传递到另一个 Controller

java - RabbitMQ 不等价参数 'x-max-length-bytes' 异常

java - EAR 和 JAR 文件中的 persistence.xml。使用哪个

java - 礼品登记循环程序

java.lang.ClassCastException : java. lang.String JSON Tokener android

java - 从 Control 数组按类型获取 UI 元素?