• 小成就之解决调用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改成相对路径!

    初始想法(错误的做法

    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的意思是读取WebRootWEB-INFclasses下的applicationContext.xml文件,也就是Web.xml文件的所在位置那我们可不可以把applicationContext.xml移到WebRootWEB-INFclasses下呢?
    • applicationContext.xml文件是放在WebRootWEB-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的默认读取路径设置为WebRootWEB-INFclassesapplicationContext.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运行时就不能在WebRootWEB-INF读取而在WebRootWEB-INFclasses就能读取到呢?(加载时应该都是E:/tomcat/bin/主目录才对啊!)
    2. applicationContext.xml放在src目录下与放在WEB-INF目录下是不是都可以的?没关系吗?

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

  • 相关阅读:
    Json,Gson,FastJson解析笔记
    Java 里把 InputStream 转换成 String 的几种方法
    11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
    HDU 1599 find the mincost route
    如何更改Java括号中的默认对齐
    Android Java 与 C++ 恒调用,路径、文件名、延长的最大长度
    使用android SpannableStringBuilder实现图文混排,看到许多其他
    POJ 2352 Stars 树阵
    cocos2dx环境配置和打包
    DSR on Openstack POC
  • 原文地址:https://www.cnblogs.com/cnJun/p/3288794.html
Copyright © 2020-2023  润新知