• 关于SpringMVC项目报错:java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/xxxx.xml]


    关于SpringMVC项目报错:java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/xxxx.xml]

    问题描述:

    在搭建SpringMVC项目时,使用多个Spring配置文件,这里我在web.xml中配置spring的配置文件:

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    然后再spring-mvc.xml配置文件中又使用<import>标签导入其他的配置文件:applicationContext.xml,导入代码如下:

    <import resource="./applicationContext.xml"/>
    

    其中我将两个spring配置文件都放在resources下的spring文件夹下,文件结构如下:

    |---resources
       |---spring
          |---spring-mvc.xml
          |---applicationContext.xml
    

    此时在项目执行时报错:

    java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

    解决办法

    看到这个错误,我是不相信的,我检查了我的spring-mvc.xml文件,确定我使用是相对路径,并没有什么问题,于是到网上查资料,说使用spring配置文件路径填写的不对,推荐使用:classpath:或者classpath*:,分别使用这两种方式在<import>中改写applicationContext.xml的路径,可以是依然报FileNotFoundException,我十分确定我填写的路径没有问题,但是一直报错就十分奇怪,我观察报错的路径:

    Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

    项目在运行是是直接去WEB-INFapplicationContext.xml文件,我查看项目运行时target文件夹,找到这是applicationContext.xml配置文件在:

    /WEB-INF/classes/spring/applicationContext.xml

    下,于是我将applicationContext.xml放到WEB-INF下在执行,发现没有的报错了,说明项目在运行时<import>根本没有起到应有的作用,系统依然走的是默认到WEB-INF目录下找的配置文件,这显然不是我要的效果,就在我最抓狂的时候,我发现我的web.xml少了几行配置:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/spring-mvc.xml</param-value>
    </context-param>
    

    抱着试一试的想法,我将这一行配置加上,运行项目后顺利运行
    ......
    ......
    ......
    (╯‵□′)╯︵┻━┻

    总结

    经过这一次的教训,发现做事的时候还是不够细心,这里我在晚上寻找解决办法是有关这个问题需要注意的地方列一下:

    • 经过多方资料的对比,在设置spring配置文件时,建议使用classpath而不是classpath*貌似会因为这个问题报错,我暂时没有遇到过
    • 在配置文件wen.xml中使用<context-param>配置contextConfigLocation变量,我就是犯了这个错误
    • 配置文件名一定要写写对,这种属于最低级也是最容易忽略的错误

    另外如果有什么其他问题,或者错误的地方,希望大家提出宝贵的意见,谢谢

    参考资料

    http://blog.csdn.net/lee0723/article/details/18223749
    http://perfy315.iteye.com/blog/2009258
    http://blog.csdn.net/zwx_20092029/article/details/39229971

  • 相关阅读:
    【关键字】
    【选择结构语句:switch】
    【数据类型】
    【接口】
    【抽象类和接口的区别】
    【访问权限】
    【内部类】
    【方法】
    【this 关键字】
    【Static】
  • 原文地址:https://www.cnblogs.com/yxdz/p/7528351.html
Copyright © 2020-2023  润新知