java專案的classpath說明
首先 classpath是指 WEB-INF資料夾下的classes目錄
解釋classes含義:
1.存放各種資源配置檔案 eg.init.properties log4j.properties struts.xml
2.存放模板檔案 eg.actionerror.ftl
3.存放class檔案 對應的是專案開發時的src目錄編譯檔案
總結:這是一個定位資源的入口
一、javaWeb專案路徑問題
把配置檔案如:struts.xml、applicationContext.xml等放到src目錄(就是存放程式碼.java檔案的目錄),然後使用“classpath:xxx.xml”來讀取,都放到src目錄準沒錯
曾經試過把配置檔案放到WEB-INF目錄,然後以路徑“/WEB-INF/xxxx.xml”來成功讀取配置檔案
但是在用ClassPathXmlApplicationContext()函式不能讀取這樣的路徑,用上面的方法才能成功讀取配置檔案
回答:
【01】 src路徑下的檔案在編譯後會放到WEB-INF/clases路徑下吧。預設的classpath是在這裡。直接放到WEB-INF下的話,是不在classpath下的。用ClassPathXmlApplicationContext當然獲取不到。
【02】如果單元測試的話,可以在啟動或者執行的選項裡指定classpath的路徑的。用maven構建專案時候resource目錄就是預設的classpath
【03】classPath即為java檔案編譯之後的class檔案的編譯目錄一般為web-inf/classes,src下的xml在編譯時也會複製到classPath下
比如我們這裡 web.xml 部分程式碼如下
1、/表示 web根目錄
contextConfigLocation
/springmvc.xml
/springmvc.xml 的/表示 web目錄(或者webRoot,webApp)
我們的 springmvc.xml 只有放在如上圖位置(web的根目錄),伺服器才不會報錯,程式得以正常執行
2、預設也是在 web根目錄
contextConfigLocation
springmvc.xml
我們這裡不加 / 的效果和加 /是 一樣的,springmvc.xml都是要放在web的根目錄,即和第一種相同
3、classpath:預設指向是 src 目錄 contextConfigLocation classpath:com/liuyanzhao/ssm/springmvc.xml nit-param>classpath 的一般指的是 src 目錄,com.liuyanzhao.ssm是包名,寫路徑的時候是com/liuyanzhao/ssm/springmvc.xml 如果我們把springmvc.xml放到src根目錄,只需要寫 classpth:springmvc.xml 啦
4、classpath:也可以時其他 Source Folder
我們在專案裡新建一個Source Folder(注意,不是普通的資料夾),然後裝個資料夾也加入了環境。
contextConfigLocation
classpath:spring/springmvc.xml
注意:在多個classpath中存在同名資源,都需要載入,
那麼用classpath:只會載入第一個
二、web.xml 配置中classpath: 與classpath*:的區別
classpath 和 classpath* 區別:
classpath:只會到你的class路徑中查詢找檔案;
classpath*:不僅包含class路徑,還包括jar檔案中(class路徑)進行查詢.
Java程式碼 收藏程式碼
<param-value>classpath:applicationContext-*.xml</param-value>
或者引用其子目錄下的檔案,如
Java程式碼 收藏程式碼
<param-value>classpath:context/conf/controller.xml</param-value>
classpath*的使用:當專案中有多個classpath路徑,並同時載入多個classpath路徑下(此種情況多數不會遇到)的檔案,*就發揮了作用,如果不加*,則表示僅僅載入第一個classpath路徑,程式碼片段:
Java程式碼 收藏程式碼
<param-value>classpath*:context/conf/controller*.xml</param-value>
另外:
"**/" 表示的是任意目錄;
"**/applicationContext-*.xml" 表示任意目錄下的以"applicationContext-"開頭的XML檔案。
程式部署到tomcat後,src目錄下的配置檔案會和class檔案一樣,自動copy到應用的 WEB-INF/classes目錄下
classpath:與classpath*:的區別在於,
前者只會從第一個classpath中載入,而
後者會從所有的classpath中載入
如果要載入的資源,
不在當前ClassLoader的路徑裡,那麼用classpath:字首是找不到的,
這種情況下就需要使用classpath*:字首
在多個classpath中存在同名資源,都需要載入,
那麼用classpath:只會載入第一個,這種情況下也需要用classpath*:字首
注意:
用classpath*:需要遍歷所有的classpath,所以載入速度是很慢的,因此,在規劃的時候,應該儘可能規劃好資原始檔所在的路徑,儘量避免使用 classpath*
三、例項解析
寫的一個小專案
下邊是它對應的webapps中的路徑:
經對比,確實如上面所說