2011-03-17 156 views
2

這是一個運行Apache和Tomcat的Windows服務器。我添加了一個新的類,現有包,並試圖從JSP頁面引用它是這樣的:未捕獲的異常:java.lang.ClassNotFoundException:

jsp:useBean id="promotion" class="MY.NEWCLASS" scope="session" 

我這麼想嗎?我需要做一些特別的事情來爲課程添加一個課程嗎?提前致謝。

jsp頁面加載罰款,但是當我嘗試一下使用這個類的按鈕,我得到 未捕獲的異常:java.lang.ClassNotFoundException:MY.NEWCLASS

回答

3

您需要確保類文件存在於已部署web應用的/WEB-INF/classes/MY/NEWCLASS.class。或者當它位於名稱爲filename.jar的JAR文件中的文件夾/MY/NEWCLASS.class中時,則需要確保它位於部署的Web應用程序的/WEB-INF/lib/filename.jar中。

請注意,完全限定名稱區分大小寫。所以名稱必須完全匹配。也許你對你的問題中的代碼示例不小心,但以這種方式使用大寫字母不是正常的naming convention。例如,有可能存在實際上是,稱爲my.NewClass。您應該在jsp:useBean中聲明。

+0

@BalucC包是全部大寫的,那是我得到代碼之前。 .class文件位於/ WEB-INF/classes/MY目錄中,但我不知道要在/ WEB-INF/lib中檢入哪個jar文件 – user664527 2011-03-17 17:11:14

+0

如果您沒有安裝JAR,那麼您不需要檢查JAR :)不管怎樣,這個異常告訴你指定的類不在類路徑中。這可能是名稱中的拼寫錯誤,錯誤的文件名,錯誤的文件擴展名,錯誤的(重新)部署,任何事情。由於您可以直接訪問環境,因此您是唯一可以說出這一點的人。 – BalusC 2011-03-18 12:23:45

+0

問題不在於類路徑,因爲同一目錄中的所有其他類都加載得很好......但現在它決定自行消失。讓我們看看它是否成立。 – user664527 2011-03-22 15:07:23

1

這看起來像你忘了將新類部署到服務器。你怎麼能調試這個?

首先,您可以檢查類路徑。在你得到異常的地方,獲得當前類裝載器:

ClassLoader cl = getClass().getClassLoader(); 

如果這是一個URLClassLoader,要求它爲它的網址:

while(cl != null) { 
    if(cl instanceof URLClassLoader) { 
     URL[] urls = ((URLClassLoader)cl).getURLs() 
     for(URL url : urls) System.out.println(url); 
    } 
    cl = cl.getParent(); 
} 

現在你可以檢查輸出包含你所期望的。