Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 516|回复: 0

小成就之解决调用spring中FileSystemXmlApplicationContext路径问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-5 10:49:25 | 显示全部楼层 |阅读模式

    此文写下调用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改成相对路径!

     

    初始想法(错误的做法

    1. 获取applicationContext.xml文件在本地的绝对路径或都获取项目在本地的路径
    2. 进行字符串整合
    3. 获得相对路径

     

    初始想法的解决过程(没解决问题

    • 用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的文件会不会出现问题呢?(或许修改了默认路径不会出现问题呢?)

    好,马上试下!

     

    实施过程

    1. 把applicationContext.xml文件复制到src目录下,删除原来在WEB-INF的applicationContext.xml文件。
    2. 修改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>
    3. 把file:E:/Workspace_newSSH/SSH_jqplot/WebRoot/WEB-INF/applicationContext.xml改成classpath:applicationContext.xml
    4. 测试

    测试的结果为相关的文件都能运行实现其功能!OK!

    还没有对FileSystemXmlApplicationContext与ClassPathXmlApplicationContext很熟悉,或许还有更好的办法解决这问题吧!努力学习中!!

    如果有什么错误,欢迎大家向我提出!

    现还有待解决的问题:

    1. 为什么applicationContext.xml文件在tomcat运行时就不能在WebRoot\WEB-INF\读取而在WebRoot\WEB-INF\classes\就能读取到呢?(加载时应该都是E:/tomcat/bin/主目录才对啊!)
    2. applicationContext.xml放在src目录下与放在WEB-INF目录下是不是都可以的?没关系吗?

    正在努力解决问题中.....

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-4 21:35 , Processed in 0.066511 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表