溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》
  • 首頁 > 
  • 教程 > 
  • 開發(fā)技術(shù) > 
  • 淺談JNDI導(dǎo)入兩個(gè)同名不同路徑j(luò)ar包的先后次序影響程序運(yùn)行結(jié)果的問題

淺談JNDI導(dǎo)入兩個(gè)同名不同路徑j(luò)ar包的先后次序影響程序運(yùn)行結(jié)果的問題

發(fā)布時(shí)間:2020-06-30 20:35:18 來源:網(wǎng)絡(luò) 閱讀:1485 作者:白無雙 欄目:開發(fā)技術(shù)

    今天下午我做了一個(gè)關(guān)于學(xué)生信息管理系統(tǒng)的demo,主要功能是使用jdbc對學(xué)生信息進(jìn)行增刪改查,整體的邏輯按照J(rèn)NDI進(jìn)行,使用oracle數(shù)據(jù)庫。

    第一次運(yùn)行,果不其然出現(xiàn)了異常,參照下圖:


淺談JNDI導(dǎo)入兩個(gè)同名不同路徑j(luò)ar包的先后次序影響程序運(yùn)行結(jié)果的問題

   

    經(jīng)過檢查,我發(fā)現(xiàn)我oracle的jar包導(dǎo)入路徑錯(cuò)了,沒有按照J(rèn)NDI中的要求導(dǎo)入到tomcat文件夾下的lib文件夾中,而是導(dǎo)入到了項(xiàng)目的lib文件夾中。我向tomcat文件夾下的lib文件夾中添加了同名的jar包,我以為這樣一來,程序就能正常運(yùn)行了。

    然而并沒有。

    異常還是這個(gè)異常,ClassNotFoundException,無法加載oracle數(shù)據(jù)庫的驅(qū)動(dòng)。

    我意識(shí)到可能是因?yàn)閮蓚€(gè)同名的jar包同時(shí)存在,tomcat在處理上可能存在某一方面的優(yōu)先級(jí)。于是我決定把之前錯(cuò)誤路徑上的jar包給刪掉,只保留正確路徑上的jar包。經(jīng)過這次改動(dòng),程序可以正常運(yùn)行了。


淺談JNDI導(dǎo)入兩個(gè)同名不同路徑j(luò)ar包的先后次序影響程序運(yùn)行結(jié)果的問題

淺談JNDI導(dǎo)入兩個(gè)同名不同路徑j(luò)ar包的先后次序影響程序運(yùn)行結(jié)果的問題

    

    到了這里,這個(gè)項(xiàng)目運(yùn)行成功了,然而接下來才是正題。

    項(xiàng)目成功運(yùn)行后,我突發(fā)奇想,如果在已存在正確路徑中jar包的基礎(chǔ)上,在錯(cuò)誤的路徑上再導(dǎo)入一個(gè)jar包,會(huì)不會(huì)重新產(chǎn)生異常呢?

    答案再次出乎我的意料,還是沒有。程序運(yùn)行得非常順利。

    我逐漸意識(shí)到,這個(gè)現(xiàn)象的產(chǎn)生,可能與jar包導(dǎo)入的先后次序有關(guān)系。于是我新建了一個(gè)項(xiàng)目,項(xiàng)目內(nèi)容與這個(gè)相同。我先導(dǎo)入了一個(gè)錯(cuò)誤(指路徑不為tomcat文件夾下lib文件夾中的jar包,下文的正確同義)的jar包,運(yùn)行程序,然后導(dǎo)入了正確的jar包,這次的運(yùn)行結(jié)果與第一次運(yùn)行的結(jié)果相同。

    第二次,我先導(dǎo)入了一個(gè)正確的jar包,運(yùn)行程序,然后導(dǎo)入了錯(cuò)誤的jar包,這次的運(yùn)行結(jié)果與上文運(yùn)行成功的效果相同。

    那么,如果正確和錯(cuò)誤的jar包都存在,但是在兩個(gè)jar包都導(dǎo)入完成之前沒有運(yùn)行程序,結(jié)果又會(huì)怎么樣呢?帶著這個(gè)疑問,我開始了第三次的測試。測試的結(jié)果是程序可以成功運(yùn)行。

    經(jīng)過上面三次的測試,對于JNDI中jar包導(dǎo)入先后次序影響運(yùn)行結(jié)果的問題,我簡單總結(jié)如下:

   (1)某一時(shí)刻,只要運(yùn)行了含有某個(gè)jar包的程序,即便在別的路徑導(dǎo)入一個(gè)同名的jar包,運(yùn)行的結(jié)果都會(huì)與之前的一致。只有把先導(dǎo)入的jar包在其路徑中刪除,程序才會(huì)在另一個(gè)jar包的基礎(chǔ)上運(yùn)行。可以把這種現(xiàn)象理解為一種“先入為主”的效果。

   (2)在JNDI中,如果同時(shí)存在正確和錯(cuò)誤的jar包,且在兩個(gè)jar包都導(dǎo)入完成前沒有運(yùn)行程序,則程序能夠正常運(yùn)行。


    注:在本個(gè)demo中,我使用的是Java EE 5.0,Tomcat 6.0,更高級(jí)別的版本可能不會(huì)出現(xiàn)此類問題。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI