關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM