1. 程式人生 > >package 以java開頭的包名報:ClassNotFoundException真相

package 以java開頭的包名報:ClassNotFoundException真相

問題由來:根目錄為java,直接在包下新建類:TestServlet,頁面上請求改servlet時,丟擲

ClassNotFoundException ...

網上一搜,大家都說是<servlet-class>沒有配包名...,很尷尬...老司機會犯這種錯誤?高斯要咧


如圖啦,發現不管怎麼修改web.xml檔案,tomcat配置,都不能訪問。

一番瞎搞之後,發現: package 命名中java放在中間是可以,但是是不能放開頭。

如果你也是覺得你的配置檔案沒有配錯,jsp頁面可以訪問,但是自己寫的那個servlet不能訪問,

那麼恭喜你,問題就是:以java作為包首,Application ClassLoader在載入這個java.TestServlet

時,請求上級類載入器,擴充套件載入器Extension ClassLoader,然後同樣的Extension ClassLoader

請求核心載入器Bootstrap ClassLoader,這裡,由於核心載入器負責載入java核心類(所有java.開頭的package)

所以這裡就載入java.TestServlet,但是,rt.jar中肯定不會有這個類。。。於是說找不到這個類。

其實問題並沒有結束,按理說,找不到這個類之後丟擲異常,被捕獲了,然後給下一級的類載入器載入,

下一級再給下一級,於是又到了application ClassLoader這裡載入,應該是可以發現的。

那沒有給下一級載入就是說,可能所有的java開頭的包都會直接發到啟動類載入器,沒找到就直接丟擲異常。

這個,後面有機會了解jvm類載入詳情再補上。