当前位置: 首页 > 面试题库 >

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

孙清野
2023-03-14
问题内容

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

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

在设置测试之前,在我之前的配置中,该文件是通过ServletContext访问的,位于 WEB-INF /
文件夹中。但是,要使其能够从测试项目访问,我必须将其移至 源/
文件夹,并使用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类并将其类名传递给
@ContextConfiguration 批注。

*后来想到的 *另一种更清洁的解决方案 是重构服务并ServletContext
通过@Autowired而不是进行注入ServletContextAware,并提供相应类型的bean(实际上是一个MockServletContext实例)。

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

*春季3.2的 *更新 在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 {

查看文章中的详细信息



 类似资料:
  • 我有一个资源文件夹/包在我的项目的根,我"不"想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流,并在内容中读取...假设在运行时之前没有确定文件名...那我该怎么办?有没有一种方法来获得一个文件夹中的文件列表在您的jar文件?请注意,带有资源的

  • 问题内容: 我的App Engine项目的war / WEB-INF文件夹中有一个文件。我在FAQ中读到,您可以在servlet上下文中从那里读取文件。我不知道如何形成资源的路径: 我将如何构造到该资源的路径以与File()一起使用,就像上面一样? 问题答案: 有两种方法可以做到这一点。只要扩展WAR文件(一组文件而不是一个.war文件),就可以使用以下API: http://tomcat.apa

  • 我刚刚开始使用JSP,遇到了一个问题。 据我所知,WEB-INF下的JSP页面可以通过浏览器在localhost中使用URL进行访问: 但是,如果我在WEB-INF文件夹(即'MyFolder')中创建另一个子文件夹,并尝试通过URL访问相同的JSP页面: 它给出了一个错误404。JSP文件导航系统与HTML文件导航系统有区别吗? 编辑:我正在使用servlet来显示我的JSP页面: EDIT2:

  • 我正在尝试从一个java项目运行一个javascript文件。目前,我正在使用Nashorn java脚本引擎运行脚本,并使用maven编译和创建jar文件。 我得到警告: 我使用的是openjdk 11版本。这会是一个很大的问题吗?如果是这样的话,我要做的事情的最佳替代方案是什么? 我得到了一个FileNotFoundException 我有一个javascript文件脚本。js和两个java文

  • 我正在从主类访问资源文件夹中的文件 我收到了这个错误: 我甚至打开了jar文件,remoteUnitsIdsInOldServer.txt文件就在那里,在类内部

  • 问题内容: 我无法从存储在WEB- INF中的JSP访问某些图像和CSS文件。我的servlet调用了JSP,并且全部加载正常,但是页面无法找到图像和CSS文件。我对这种事情很陌生,希望能提供帮助。我知道过去对此存在一些疑问,我已经尝试过这些建议提出的建议,但是我似乎无法回避它。这是JSP的内容(我尝试了一堆不同的方法): 这是我的目录结构: http://gyazo.com/0a7aea0a44