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

我有一个Web应用程序,其中包含我的应用程序服务之一的配置xml文件,该文件显示为spring

bean。另外,我在同一个工作区中有一个独立的Java应用程序(从其pom.xml引用我的Web应用程序项目),该应用程序使用Spring

TestContext框架运行测试,并且其中一个测试检查该XML文件的配置。

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

在设置测试之前,在我之前的配置中,该文件是通过ServletContext访问的,位于

文件夹中。但是,要使其能够从测试项目访问,我必须将其移至

文件夹,并使用getClassLoader()。getResourceAsStream()方法而不是ServletContext进行加载。但这使编辑文件变得麻烦,因为每次必须重新部署应用程序时。

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

PS当前是带有Tomcat服务器的STS项目。

回答:

我最终使用Spring

MockServletContext类,并在测试运行之前将其直接注入到我的服务bean中,因为我的服务已实现ServletContextAware

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = { "/test-ctx.xml" } )

public class SomeServiceTest {

@Autowired

private MyServletContextAwareService myService;

@Before

public void before(){

//notice that I had to use relative path because the file is not available in the test project

MockServletContext mockServletContext = new MockServletContext("file:../<my web project name>/src/main/webapp");

myService.setServletContext(mockServletContext);

}

如果我有多个使用Servlet

Context的类,那么更好的解决方案是使用WebApplicationContext代替默认的类(当前由DelegatingSmartContextLoader提供),但是它将需要实现自定义ContextLoader类并将其类名传递给

批注。

是重构服务并ServletContext

通过@Autowired而不是进行注入ServletContextAware,并提供相应类型的bean(实际上是一个MockServletContext实例)。

将来可能MockServletContext会在Spring中添加来自测试类的直接支持,请参阅SPR-5399和SPR-5243。

在Spring

3.2中,Servlet上下文的初始化变得像添加一个@WebAppConfiguration注释一样简单:

@RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration("file:../<my web project name>/src/main/webapp")

@ContextConfiguration(locations = { "/test-ctx.xml" } )

public class SomeServiceTest {

查看文章中的详细信息

以上是 如何从引用的Java项目访问静态资源(WEB-INF)文件夹中的文件? 的全部内容, 来源链接: utcz.com/qa/425957.html

回到顶部