2014-07-06 72 views
0

我有一個程序,我在一個Spring項目中運行,它總是因爲java.io.FileNotFoundException而失敗,當涉及到定位DispatcherServlet時。java.io.FileNotFoundException:用於WebApp中的DispatcherServlet

DispatcherServlet住在\WEB-INF文件夾中,可供項目其餘部分無障礙訪問。

所以此刻我被迫如下的路徑硬編碼到DispatcherServlet

File config = new File("C:\\project\\build\\web\\WEB-INF\\project-servlet.xml"); 
    boolean exists = Misc.checkFileExists(config.getAbsolutePath()); 
    if (exists) { 
     System.out.println("File: " + config.getAbsolutePath() + " found."); 
    } 
    ConfigurableApplicationContext context = new FileSystemXmlApplicationContext(config.getAbsolutePath());` 

這是不是在所有的最佳途徑。

但是,如果我嘗試將DispatcherServlet放置在\WEB-INF下的文件夾中,例如, \WEB-INF\resources以滿足CLASSPATH,該文件仍未找到。因此,我不能使用ClassPathXmlApplicationContext

我已經設置我的web.xml文件,如下所示的解決了這個:

<servlet> 
    <servlet-name>project</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/classes/project-servlet.xml</param-value> 
    </init-param>  
</servlet>  

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param>   
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/project-servlet.xml</param-value> 
</context-param> 

應用程序工作與做測試程序:

ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("project-servlet.xml"); 

我要補充一點,我有一個project-servlet.xml文件它配置了一切。

+0

什麼是完整的異常堆棧跟蹤,以及導致此堆棧跟蹤的代碼是什麼? –

+0

已添加到問題中。 –

+0

WEB-INF文件夾不在類路徑中。 WEB-INF/classes和WEB-INF/lib文件夾默認包含在classpath中。還可以在web.xml中使用WebApplicationContext使用ContextLoaderListener來配置您的Spring上下文。 – dinukadev

回答

0

該代碼沒有意義。正如其名稱所示,ClassPathXmlApplicationContext用於從類路徑資源中加載XML文件。但是你將它傳遞給一個文件的路徑。閱讀the javadoc

獨立的XML應用程序上下文,從類路徑以上下文定義文件,解釋平原路徑,包括包路徑類路徑的資源名稱(例如「mypackage中/ myresource.txt」)

什麼構成Web應用程序的類路徑是WEB-INF/classes目錄,以及WEB-INF/lib內的所有jar文件。因此,您的XML文件不在CLASSPATH中,因此無法使用ClassPathXmlApplicationContext加載。

如果要從WEB-INF加載上下文文件,請使用XmlWebApplicationContext

無論如何您都不應該手動執行該操作,因爲Spring Web應用程序通常使用web.xml文件或使用JavaConfig進行配置,如the documentation中所述。