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 的系统。
提前敲定,
基督教
在 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 文档
| 归档时间: |
|
| 查看次数: |
14076 次 |
| 最近记录: |