小成就之解决调用spring中FileSystemXmlApplicationContext路径问题
此文写下调用spring过程中遇到的一个问题!或许对于入行的人一看觉得我很傻逼吧,这问题谁都会了!但我觉得对于新手(自已)来说,算是一个好思路与好办法!
问题:
- 对于
test_aa ta = (test_aa) new FileSystemXmlApplicationContext("file:E:/Workspace_newSSH/SSH_jqplot/WebRoot/WEB-INF/applicationContext.xml").getBean("test_aa");
怎么把file:E:/Workspace_newSSH/SSH_jqplot/WebRoot/WEB-INF/applicationContext.xml改成相对路径!
初始想法(错误的做法):
- 获取applicationContext.xml文件在本地的绝对路径或都获取项目在本地的路径
- 进行字符串整合
- 获得相对路径
初始想法的解决过程(没解决问题):
- 用System.getProperty("user.dir")?但是这在java运行中是可以获得,但我项目是以tomcat运行的,获得的成了E:/tomcat/bin/SSH_jqplot/WebRoot/WEB-INF
- 用JdomParse.class.getClassLoader().getResource("").getPath();??但JdomParse识别不了!
- 用Class.class.getClass().getResource("/WebRoot").getPath()???但系统报Exception in thread "main" java.lang.NullPointerException错误!!
- 用ServletContext.getRealPath("mypath/filename")???但ServletContext也识别不了!!!
- 后来也尝试了在jsp文件中获取路径,就是以request来获取,获取出来的成了http://localhost:.....开头的了!
不甘心,目地是可以达到的!但应该怎么做呢?
今天花点了心思去看了下FileSystemXmlApplicationContext与ClassPathXmlApplicationContext,有了点新的想法!尝试了下,竟真的行了!
想法:
- classpath:applicationContext.xml的意思是读取WebRoot\WEB-INF\classes\下的applicationContext.xml文件,也就是Web.xml文件的所在位置那我们可不可以把applicationContext.xml移到WebRoot\WEB-INF\classes\下呢?
- applicationContext.xml文件是放在WebRoot\WEB-INF\下的,也就是spring默认的读取路径!那我们可不可以修改默认路径呢?
- 完成上面的操作后把file:E:/Workspace_newSSH/SSH_jqplot/WebRoot/WEB-INF/applicationContext.xml改成classpath:applicationContext.xml这样可不可以运行呢?
- 若修改上面的配置,那其他用到spring的文件会不会出现问题呢?(或许修改了默认路径不会出现问题呢?)
好,马上试下!
实施过程:
- 把applicationContext.xml文件复制到src目录下,删除原来在WEB-INF的applicationContext.xml文件。
- 修改applicationContext.xml默认的读取路径。在Web.xml文件加入或修改成下面的代码,代码主要意思是,把applicationContext.xml的默认读取路径设置为WebRoot\WEB-INF\classes\applicationContext.xml
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
- 把file:E:/Workspace_newSSH/SSH_jqplot/WebRoot/WEB-INF/applicationContext.xml改成classpath:applicationContext.xml
- 测试
测试的结果为相关的文件都能运行实现其功能!OK!
还没有对FileSystemXmlApplicationContext与ClassPathXmlApplicationContext很熟悉,或许还有更好的办法解决这问题吧!努力学习中!!
如果有什么错误,欢迎大家向我提出!
现还有待解决的问题:
- 为什么applicationContext.xml文件在tomcat运行时就不能在WebRoot\WEB-INF\读取而在WebRoot\WEB-INF\classes\就能读取到呢?(加载时应该都是E:/tomcat/bin/主目录才对啊!)
- applicationContext.xml放在src目录下与放在WEB-INF目录下是不是都可以的?没关系吗?
正在努力解决问题中.....