引言
什麼是Java?這個問題即便是問入行已經多年的老Java開發,也不是所有人都能說出所以然。所以整理出了以下的基礎概念,爲初入Java海洋的人一點指引。本文部分內容引自網絡。
JVM、JRE、JDK
Java通過JVM(虛擬機)來達到跨平臺。開發者使用JDK開發程序,通過編譯器編譯後,JVM調用JRE類庫組件針對不同的系統環境對編譯碼進行解釋,並執行程序。
Java源代碼---->編譯器---->jvm可執行的Java字節碼(即虛擬指令)---->jvm---->jvm中解釋器----->機器可執行的二進制機器碼---->程序運行。
JDK是開發者使用的,裏面包含了各種API。JRE是供JVM虛擬機調用的類庫。
JRE及JVM是用戶使用的,他們不包含編譯程序。
在我們安裝JDK的時候,目錄中已經包含了JRE及JVM。
注意:跨平臺的是 Java 程序,不是 JVM。JVM 是用 C/C++ 開發的,是編譯後的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的 JVM。
由圖中可以看出以下幾點:
- JDK=JRE+多種Java開發工具
- JRE=JVM+各種類庫
- 這三者的關係是一層層的嵌套關係。JDK>JRE>JVM
JVM:
JRE(JRE包含JVM):
JDK(JDK包含了JVM和JRE):
bin:最主要的是編譯器(javac.exe)
include:java和JVM交互用的頭文件
lib:類庫
jre:java運行環境
Tomcat
Tomcat是web 服務器。我們做好的web應用程序需要Tomcat才能展現。而Tomcat又需要運行在系統上,就需要JVM(虛擬機系統)。
- 假設tomcat監聽8080端口,當一個http請求從主機的8080端口發送過來時,tomcat最先獲知。
- tomcat將此請求作爲任務加入一個隊列中,jvm中有若干工作者線程會從這個隊列中獲取任務。
- 假設工作線程A取到了這個任務,那麼線程A通過分析請求的url,檢查已加載的web.xml配置,來判斷此請求應該交給應用的哪個servlet處理(假設應用是用servlet實現的)
- 工作線程A調用對應的servlet的方法(service/get/post等),把請求封裝成request對象傳給servlet
- 此時應用開始幹活(實際上幹活的還是工作線程,只不過執行的是應用中編寫的業務邏輯),解析請求參數,處理業務流程,生成response
- 工作線程A把response回送給請求的發送端。
- 通常情況下,tomcat啓動時候使用的jdk的路徑默認爲環境變量裏配置的JAVA_HOME;
- 修改默認jdk:我們都知道啓動tomcat可以通過運行bin下的startup.bat,startup.bat會調用catalina.bat文件,而catalina.bat會調用setclasspath.bat文件來獲取JAVA_HOME和JRE_HOME這兩個環境變量的值,因此若要在tomcat啓動時指向特定的JDK,則需在setclasspath.bat文件的開頭處加上JAVA_HOME和JRE_HOME。
- eclipse自帶編譯工具,只需用jre即可(java項目只能運行在jvm上/運行類庫) jdk開發工具包
JavaEE、JavaSE、JavaME
使用較多的是JavaEE,主要做web。JavaSE中也有web相關模塊,但是比JavaEE弱。
- javase: 即J2SE, java標準版, 主要做一般的java應用, 比如, 應用軟件/ QQ之類的通信軟件等等.
- javaee: 即J2EE, 主要做企業應用, 比如公司網站, 企業解決方案等;
- javame: 即J2ME, 主要面向嵌入式等設備應用的開發, 比如手機遊戲等
IDE-IntelliJ IDEA
主流使用IntelliJ IDEA,分企業版(收費)及社區版(免費)。企業版包含Java EE(Java的企業版)全部內容。
項目管理-Maven
之前主流用Ant,但是目前已經被Maven及Gradle取代。其中,Gradle是最新的項目管理軟件,但是國內主要還是以Maven爲主。Maven可以用來管理、配置、測試和部署項目,擁有生命週期及倉儲概念。它將項目本身所有依賴項通過網絡下載到倉儲。可以通過修改POM配置文件來隨時修改本項目的依賴項,而Maven會實時更新倉儲。
版本管理-Git
目前使用的版本管理軟件主要有svn及Git。相比前者,由於Git有本地緩存區的概念,可以輕易建立分支(包括離線建立分支),同時可以離線查看歷史記錄等。 Git的使用者以及越來越多,Git+Maven已經是比較主流的Java開發選擇。
Spring Boot
SpringBoot是一個框架,一種全新的編程規範,他的產生簡化了框架的使用,所謂簡化是指簡化了Spring衆多框架中所需的大量且繁瑣的配置文件,所以 SpringBoot是一個服務於框架的框架,服務範圍是簡化配置文件。
參考引用: