以下文章轉載自a personal blog:For Future,因為昨天下午在cmd模式下編譯servlet失敗,后來在網上找到這篇文章幫我解決了該問題,我覺得挺值得收藏的,並且這篇文章對"兩個jre"和"三個lib"的功能簡單扼要的解釋清楚了.
-----------------------------------------
lib目錄下放置着jar包。程序中的import語句找的就是這些文件!例如:import javax.servlet.RequestDispatcher;
問題在於,在cmd模式下編譯,系統會提示:CheckAccount.java:5: 軟件包 javax.servlet 不存在!
在安裝jdk之后,仔細觀察下安裝路徑下的文件夾,其中共計兩處包含jre目錄!共有三處lib目錄!包含javax.servlet的jar包就應該被安置在其中的某一處。首先在tomcat的安裝目錄下,找到servlet-api.jar(位於D:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar)。這個包用winrar解壓之后看到內部結構為:
javax\servlet\http
同import語句的結構一致!
我的硬盤里,lib文件夾的位置如下:
D:\Program Files\Java\jdk1.6.0_02\jre\lib
D:\Program Files\Java\jre1.6.0_02\lib
D:\Program Files\Java\jdk1.6.0_02\lib
分別為jdk下的lib;jre下的lib;jdk下的jre下的lib。
經過驗證,把servlet-api.jar包拷貝進入jdk下的jre下的lib下的ext目錄后,例如:D:\Program Files\Java\jdk1.6.0_02\jre\lib\ext,import語句順利通過編譯!即:C:\Program Files\Java\jdk1.5.0_08\jre\lib\ext相關的,其他從外部導入的jar包,都放在這個目錄下。例如:在工程中導入mysql驅動jar包“mysql-connector-java-3.0.17-ga-bin.jar”,其本質是拷貝了該jar包到ext目錄下。其他情況,再添加oracle驅動jar包也類似處理。
個人補充:
在這里我想說明一下,其實所有的路徑都是配置過的,你在程序開發的過程中用到底jar包,都是根據配置路徑找到的,就本文而言情況如下:
在Eclipse中配置了你的JDK環境,方法:在Eclipse中點擊window-->preferences,然后選擇java-->installed JRES,在右側就會出現我們以前配置好的JDK(這里沒有演示JDK的安裝,大家到網上搜索一下就行),點擊OK。
然后再創建項目的時候,在此路徑下的所有jar包,都會應用到開發環境中;如果你是先創建了項目,然后再配置jdk路徑,則原來項目中引用的不會自動更新。
另外,Eclipse還有其他方式查找路徑,比如根據jdk_home,Java_home,ClassPath等等的,這里就不一一闡述了,感興趣的可以直接到網上查查。
再來解釋下,為什么會有兩處jre目錄?三個lib目錄分別什么作用?
安裝JDK后,Java目錄下有jdk和jre兩個文件夾,但jdk下還有一個jre文件夾,而且這個jre比前面那個jre在bin目錄下多了個server文件夾!
普通用戶裝jre即可。開發人員需要安裝jdk,其中包括jre。所以jdk目錄下包括jre目錄。兩個jre大體相同,有細微的差別。
兩套 jre ,是針對不同的工作職責!不同的 jre 負責各自范圍的內容。
當用戶只需要執行 java 的程序時,那么C:\Program Files\Java\jre1.5.0_08的 jre 就 ok !
當用戶是 java 程序員,則需要 java 開發環境。編譯時,系統就會優先去找C:\Program Files\Java\jdk1.5.0_08\bin下的“ java 、 javac ”這些命令所在目錄或者他們的父目錄的 jre 。即開發環境下運行的是 jdk 下的 jre 。
再說三個lib目錄:
JDK下的lib包括java開發環境的jar包,是給JDK用的,例如JDK下有一些工具,可能要用該目錄中的文件。例如,編譯器等。
JRE下的lib只是運行java程序的jar包,是為JVM運行時候用的。包括所有的標准類庫,和擴展類。
JDK下的JRE下的lib是開發環境中,運行時需要的jar包。最典型的就是導入的外部驅動jar包。因為編譯時,系統找的是jdk下的jre。而不是最外層的jre。
-----------------------------------------
最后我在這里補充幾點:
1. 在使用Eclipse的時候不需要指定的CLASSPATH,Eclipse會自己搜索.
2. 獨立目錄下的jre是通用jre,安裝時是可選的(選擇了,則會覆蓋已有版本)。jdk目錄下的jre則是必須的。如果你在eclipse里指定jdk的路徑(jre的路徑不用你指定,會自己去找的),那么用的就是這個jre。而java, web, start等,用的則是通用jre。
出處:http://www.cnblogs.com/suyang/archive/2008/03/12/1101330.html