java如何在没有servlet上下文的情况下访问WEB-INF文件夹中的文件

sil*_*ris 5 java spring tomcat web-inf

我从昨天开始在网上搜索,但我似乎无法应付手头的任务。我有一个中心类 (RuntimeConfiguration),它为我的应用程序保存大约 100 个参数。这些参数取自我存储在 WEB-INF 文件夹中的 XML 文件。在我的开发箱上,我对路径进行了硬编码,但出于非常明显的原因,这不是一个有效的解决方案。

出于可移植性的原因(我的应用程序可能在 tomcat 或 jetty 上以及在 Windows 或 Unix 下执行),我希望从我的 RuntimeConfiguration 类中拥有对该文件的通用访问方式。

我知道,如果我有一个 servlet,我可以使用 getRealPath,但是 RuntimeConfiguration 不是在 servlet 上下文中启动的。它是从一个作业(一个爬虫)调用的,而该作业又通过 applicationContext.xml 从quartz 作业控制中启动。现在这似乎是我问题的核心。

谁能告诉我,如何在这种环境中获得我的 XML 的绝对路径?

我尝试了这种 ClassLoader 方法,但它给了我一个空指针异常:

ClassLoader loader = this.getClass().getClassLoader();
loader.getResource("WEB-INF");
result = loader.getSystemResource(RTCF).toString(); 
Run Code Online (Sandbox Code Playgroud)

我也试过

URL url = this.getClass().getClassLoader().getResource("WEB-INF");
Run Code Online (Sandbox Code Playgroud)

这也会引发空指针异常

谁能给我一个可移植的解决方案,一个适用于我的开发机器和我的应用程序部署为 WAR 文件的生产系统的解决方案???顺便说一下,该方法最多应该能够处理基于 Windows 和 Mac OS X / Unix 的系统。

提前敲定,

基督教

OO7*_*OO7 0

在 Spring Web 应用程序中,除非您在 Web 应用程序上下文中将某个类声明为 bean,否则您无法获取上下文路径RuntimeConfiguration在您的班级中添加以下代码

@Autowired
private ServletContext servletContext;

public {desired returnType} getDirectoryPath(){
    File webInfPath = new File(this.getClass().getClassLoader().getResource("WEB-INF"));
    // OR use getResourceAsStream() method
    InputStream is = RuntimeConfiguration.class.getClassLoader().getResourceAsStream("WEB-INF");
}
Run Code Online (Sandbox Code Playgroud)

或者

如果您不想进行自动装配,那么您可以使用 ServletContextAware 接口实现 RuntimeConfiguration。就像下面一样,获取此类中的 servlet 上下文对象:-

public class RuntimeConfiguration implements ServletContextAware {

    private ServletContext context;
    private ServletConfig config;

    @Override
    public void setServletContext(final ServletContext servletContext) {
        this.context = servletContext;
    }

    public ServletContext getServletContext()[
        return context;
    }
    //do other tasks
}
Run Code Online (Sandbox Code Playgroud)

或者

查看ServletContextResource ServletContextResource - Spring 文档