淺析JDK、JRE、Tomcat之間的關系


問題引入

今天因為把Tomcat的版本從8升級到了9,而Tomcat9版本需要java8及其以上的版本,於是又開始了各種環境變量,Tomcat服務,開發工具的jre路徑修改。其大致的步驟如下。

1. 打開如下界面

 

2. 添加系統變量Java_Home,其值為你JDK的安裝目錄,有讀者可以看到我填入Path中的並不是JDK下的bin目錄,而單純就是JDK下的目錄。那么,只填入JDK的安裝目錄就行了嗎?如果填寫為%Java_Home%\bin,情況又有什么不同嗎?解答這個問題的答案之前,我們先來弄清楚,JDK與JRE的關系是什么,他們各自的作用又是什么,從字面意思看JDK(Java Development Tools,Java 開發工具包),JRE(Java RunTime Environment,Java運行時環境)。在我們下載好一個JDK后,你會發現JDK文件夾里有一個JRE,如圖。

  

即我們下載了一個JDK之后,JRE也在JDK文件夾之中,從廣義的范圍可以說,JDK是包含JRE的,從狹義的范圍說,JRE又是可以獨立於JDK的,這樣說的理由,即是我需要回答的第二個問題。

2. 大家都知道,JRE里面有個東西叫做JVM(Java Virtual Machine),JVM是用來運行java字節碼文件的,然后將這個后綴為.class的字節碼文件轉化為你計算機所能識別的機器指令,也即二進制數據。這也就是Java語言與平台無關性的特點體現,只要你的計算機上裝了有了JVM,就能執行Java程序。

jre文件夾里面的bin目錄和lib目錄可以看做是一個概念層的JVM,lib目錄下是JVM運行java程序的jar包,是為JVM運行時候用的。包括所有的標准類庫,和擴展類。 bin目錄就有點意思了,它其實有JDK目錄下的java.exe等可執行文件,但里面更多的是一些動態鏈接庫文件(后綴為.dll),這些文件就是JVM運行時用來訪問操作系統的。

問題解決

理解了上面的概念,我們接着來回答最初的問題。java環境變量的配置,這里我們首先要理解window操作系統下的兩個概念

用戶環境變量:專屬於某個用戶的變量,只對當前用戶有用,其他用戶無權使用。

系統環境變量:整個系統的變量,所有屬於這個系統的用戶,都共享這個變量。

用戶變量和系統變量的區別在於權限和實例。權限可能比較好理解,實例就是這樣的意思:假設你買了一輛寶馬,你太太也想開這輛車,不過你們倆身材是有差別的,在座椅高度、反光鏡位置都需要調整,那么不如准備兩套用戶變量,記錄你們倆使用上的差異,然后開車的時候(用戶登錄)的時候,自動調出已經調整好的一堆變量,就可以使用了。系統變量則不同,任何時候都只有一套,不會隨用戶登錄狀況發生變化。

為什么要使用環境變量

答案很簡單,計算機在執行某個命令時,需要去找這個命令所在的位置,從哪里找呢,答案當然是從用戶環境變量和系統環境變量里找,這些變量存儲了命令所在的位置。回過頭去看看上面的第一張圖吧,需要你填的就是變量名和變量值!

那么什么又是命令呢,我想聰明的你,肯定在cmd中使用過services.msc(查看服務),regedit(查看注冊表)、calc(打開科學計算器)等命令吧。所謂命令,其實質不過就是各種類型的文件,xxx.exe,xxx.bat,xxx.msc。這些文件有些是可以直接用編輯器打開的,有些直接是二進制的可執行文件。下面來兩張圖告訴我們,這些“命令”,其實一點也不神奇。cmd 下,通過where可以找到這個命令所在的位置

我們看到大多數的命令都存在於System32\目錄下,我們打開看一看

內容太多,這里只截取一部分,如果讀者有了解過Linux操作系統,肯定對Linux下的命令不會陌生了,和 Windows一樣,Linux操作系統的命令,也是一個個不同類型的文件,如圖

 

相信看到這里,你一定明白為什么要配置java的環境變量了。

配置場景

1. 不使用像 Eclipse 或者 IDEA 等集成開發工具,這種情況,開發者使用命令行的形式來編譯並執行java程序,在用戶變量或者系統變量請選擇一處填寫Path="%Java_Home%\bin",強迫症患者請隨意。

2. 使用需要JVM支持才能運行的程序,如Tomcat Web服務器,各種集成開發工具,請一定把 Path="%Java_Home%\bin"配置到系統環境變量,因為這些程序默認從系統環境變量去找JVM的所在之處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM