JavaWeb(一):Java技術概覽

1、Java技術體系

在早期,Java被稱爲Java開發工具包或JDK,是一門與平臺(由一組 必需的API組成)緊密耦合的語言。php

從1998年末的1.2版本開始,Java技術棧被分割爲下面關鍵部分:html

  • Java是一門包含了嚴格和強類型語法的語言。
  • Java 2平臺標準版本,被稱爲J2SE,指的是平臺以及java.lang和java.io包中包含的類。它是構建Java應用程序的基礎。
  • Java虛擬機或JVM是一個可運行編譯後Java代碼的軟件虛擬機。由於被編譯過的Java代碼只是字節碼,JVM將在運行代碼以前,把字節碼編譯成機器碼。JVM還負責管理內存,從而實現了應用程序代碼的簡化。
  • Java開發工具包或JDK。它包括了Java語言編譯器、文檔生成器、與本地代碼協做的工具和用於調試平臺類的Java源代碼。
  • Java運行時環境或JRE曾經而且如今也還是終端用戶用於運行編譯後Java應用程序的軟件。它包含了JVM但不含任何JDK中的開發工具。而JDK包含了一個JRE(即jdk既包含開發工具又包含JRE)。

上述5個組件曾經都只是規範,而不是實現。任何公司均可以經過規範實現Java技術棧,好比IBM有本身的JDK。開源社區則造成了OpenJDK項目,該項目提供Java棧的開源實現。java

咱們在Oracle網站下載的JDK,實際也是一種實現,sun公司最初就提供了Java、J2SE、JVM、JDK和JRE的標準實現,sun公司的Java實現是首選,也就是咱們通常講的JDK。在Oracle收購了Sun以後,Sun和Oracle的實現變成了同一個。python

JDK中是包括了Java SE的,咱們在Oracle網站的下載JDK,會來到下面的頁面,該頁面叫Java SE Development Kit Downloads page,JDK不只包含了Java SE,還包含了JVM以及各類工具,能夠當作Java SE開發的套件,JDK和Java SE開發是融於一體的,JDK是Java開發的最小環境,Java SE開發必須使用JDK,固然,Java EE等其餘一切Java開發都離不了JDK。ios

image

Sun和Orcle並無官方實現Java EE,而是各個Web服務器廠商本身實現。c++

image

以上根據各個組成部分的功能來進行劃分的,若是按照技術所服務的領域來劃分,或者說按照Java技術關注的重點業務領域來劃分,Java技術體系分爲四個平臺:git

  • Java Card
  • Java ME
  • Java SE
  • Java EE

image

Java SE、Java EE等名詞,既是規範又是實現,用的時候並不怎麼區分,容易搞混。github

 

2、Java運行流程

高級語言須要翻譯成機器語言,纔可以被機器執行。根據不一樣的翻譯方式,高級語言能夠被分爲解釋型語言和編譯型語言,好比C語言是編譯型語言,python是解釋型語言。web

Java是一種編譯型-解釋型語言,既有編譯過程又有解釋過程。數據庫

2.1 解釋型語言和編譯型語言

計算機程序,其實就是一組計算機指令的集合,能真正驅動機器運行的是機器指令,但讓普通開發者直接編寫機器指令是不現實的,所以就出現了計算機高級語言。高級語言容許使用天然語言(一般就是英語)來編程,但高級語言的程序最終必須被翻譯成機器指令來執行。
高級語言按照程序的執行方式,能夠分爲編譯型和解釋型兩種。

編譯型語言

編譯型語言是指使用專門的編譯器,針對特定平臺(操做系統)將某種高級語言源代碼,一次性「翻譯」成可被該平臺硬件執行的機器語言(包括機器指令和操做數),幷包裝成該平臺所能識別的可執行程序的格式,這個轉換過程稱爲編譯(Compile)。編譯生成的可執行程序能夠脫離開發環境,在特定的平臺上獨立運行。即物理計算機操做系統直接運行。

編譯器,能夠理解爲就是一個比較複雜的計算機程序,它能夠接受一個以高級語言編寫的程序,並將其翻譯成以某個計算機的機器語言表達的等效程序。

有些程序編譯結束後,還可能須要對其餘編譯好的目標代碼進行連接,即組裝兩個以上的目標代碼模塊生成最終的可執行程序,經過這種方式實現低層次的代碼複用。
由於編譯型語言是一次性編譯成機器語言的,因此能夠脫離開發環境獨立運行,並且一般運行效率較高。但由於編譯型語言的程序被編譯成特定平臺上的機器碼,所以編譯生成的可執行程序一般沒法移植到其餘平臺上運行,若是須要移植,則必須將源代碼複製到特定平臺上,針對特定平臺進行修改,至少須要採用特定平臺上的編譯器從新編譯。

現有的 C 、C++、Objective-C、Pascal 等高級語言都屬於編譯型語言。

半編譯型語言

此外,還有一種僞編譯型語言,如 Visual Basic,它屬於半編譯型語言,並非真正的編譯型語言。它首先被編譯成 P-code 代碼(中間代碼),並將解釋引擎封裝在可執行程序內,當運行程序時,P-code 代碼纔會被解析成真正的二進制代碼。
從表面上看,Visual Basic 能夠編譯生成可執行的 EXE 文件,並且這個 EXE 文件也能夠脫離開發環境,在特定平臺上運行,很是像編譯型語言。實際上,在這個 EXE 文件中,既有程序的啓動代碼,也有連接解釋程序的代碼,而這部分代碼負責啓動 Visual Basic 解釋程序,再對 Visual Basic 代碼進行解釋並執行。

解釋型語言

解釋型語言是指使用專門的解釋器,將源程序逐行解釋成特定平臺的機器代碼並當即執行的語言。
解釋型語言一般不會進行總體性的編譯和連接處理,解釋型語言至關於把編譯型語言中的編譯和解釋過程混合到一塊兒同時完成。
能夠這樣認爲,每次執行解釋型語言的程序都須要進行一次編譯,所以解釋型語言的程序運行效率一般較低,並且不能脫離解釋器獨立運行。但解釋型語言有一個優點,就是跨平臺比較容易,只需提供特定平臺的解釋器便可,每一個特定平臺上的解釋器都負責將源程序解釋成特定平臺的機器指令。

也就是說,解釋型語言能夠方便地實現源程序級的移植,但這是以犧牲程序執行效率爲代價的。

編譯型語言PK解釋型語言

編譯型語言和解釋型語言的對好比圖 1 所示。

編譯型語言和解釋型語言
圖 1 編譯型語言和解釋型語言

編譯型的語言效率爲何高?藉助圖 1 不難理解,編譯型語言和解釋型語言的區別在於,編譯是對高級語言程序進行一次性翻譯,這樣的好處是,一旦源程序被完全翻譯,它就能夠重複運行,且從此都再也不須要編譯器和源代碼;而若是使用解釋器,則高級語言程序每次運行,都須要藉助源程序和解釋器,其最大的好處就是,程序有很好的可移植性。

編譯型語言編譯好了可執行文件,能夠直接運行,好比c++生成可執行文件後,咱們直接執行便可,拷貝到另外一個相同的平臺也能夠直接運行。Java效率也不錯,咱們也是編譯好了.class文件,好比用maven打包成jar包,裏面有.class文件,咱們拷貝到任何平臺上使用,都避免了編譯工做(jvm裏可能還會編譯),可是純解釋型的語言,不進行編譯,不生成可執行文件,經過解釋器將高級語言轉爲機器碼,可想而知效率確定不如直接運行可執行文件高,且每次執行都要從新解釋。

 

2.2 Java運行流程

Java運行流程大體能夠分爲編譯期和運行期。

編譯期: 是指把源碼交給編譯器編譯成計算機能夠執行的文件的過程。就是把Java代碼編成class文件的過程,編譯期只是作了一些翻譯功能,並無把代碼放在內存中運行起來,而只是把代碼當成文本進行操做,好比檢查錯誤。編譯時期檢查語法錯誤,也就是源代碼有沒有寫錯,若是源代碼沒寫錯,生成的.class文件在運行時期出錯,這些狀況就叫異常。

運行期:是把編譯後的文件交給計算機執行,直到程序運行結束。所謂運行期就把在磁盤中的代碼放到內存中執行起來,在Java中把磁盤中的代碼放到內存中就是類加載過程,類加載是運行期的開始部分。

編譯期分配內存並非說在編譯期就把程序所須要的空間在內存中分配好,而是說在編譯期生成的代碼中產生一些指令,在運行代碼時經過這些指令把程序所需的內存分配好。只不過在編譯期的時候就知道分配的大小,而且知道這些內存的位置,而運行期分配內存是指只有在運行期才肯定內存的大小,存放的位置。

Java中的綁定:綁定指的是把一個方法的調用與方法所在的類(方法主體)關聯起來(這個方法被哪一個類調用),對Java來講,分爲靜態綁定和動態綁定。

靜態調用:在程序執行前方法已經被綁定,也就是在編譯期方法明確知道被哪一個類調用。java當中的方法只有final,static,private和構造方法是前期綁定的。

動態調用:在運行時根據具體對象的類型進行綁定(只有運行時才知道方法被哪一個類調用)。在java中,幾乎全部的方法都是後期綁定的。

image

 

 

Java編譯器:將Java源文件(.java文件)編譯成字節碼文件(.class文件,是特殊的二進制文件,二進制字節碼文件),這種字節碼就是JVM的「機器語言」。javac.exe能夠簡單當作是Java編譯器。

Java解釋器:是JVM的一部分。Java解釋器用來解釋執行Java編譯器編譯後的程序。java.exe能夠簡單當作是Java解釋器。

一般狀況下,一個平臺上的二進制可執行文件不能在其餘平臺上工做,由於此可執行文件包含了對目標處理器的機器語言。而Class文件這種特殊的二進制文件,是能夠運行在任何支持Java虛擬機的硬件平臺和操做系統上的。

字節碼文件經過類裝載器裝載,被分配被分配到JVM的運行時數據區,而後會被執行引擎執行。執行引擎以指令爲單位讀取Java字節碼。每一個字節碼指令都由一個字節的操做碼和附加的操做數組成。執行引擎取得一個操做碼,而後根據操做數來執行任務,完成後就繼續執行下一條操做碼。將人能讀懂的字節碼文件轉化爲jvm能夠讀懂執行的語言,在jvm中經過三種方式經行轉化,即解釋器模式,JIT編譯器模式,混合模式。

  • 解釋器模式 (java -Xint -version)僅使用解釋器方式執行

 

  一條一條地讀取,解釋而且執行字節碼指令。由於它一條一條地解釋和執行指令,因此它能夠很快地解釋字節碼,可是執行起來會比較慢,沒有JIT的配合下效率不高。

  • JIT編譯器模式 (java -Xcomp -version)優先採用編譯方式執行程序,但解釋器要在編譯沒法進行的狀況下介入執行過程 

 

  即時編譯器把整段字節碼不加篩選的編譯成機器碼不論其執行頻率是否有編譯價值,在程序響應時間的限制下,沒有達到最大的優化。

熱點代碼

  在剛開始的時候,jvm不知道這段代碼,是否會頻繁的調用方法,或是一個循環,也就是這段代碼被屢次執行,所以剛開始的時候並不會編譯代碼,將代碼翻譯成 java 字節碼相對於編譯這段代碼並執行代碼來講,要快不少。編譯器回去衡量哪些方法會被頻繁調用,若是一個方法的執行頻率超過一個特定的值的話,那麼這個方法就會被JIT編譯成本地代碼。而這個方法或代碼塊因其運行特別頻繁,就會認爲這是「熱點代碼」(Hot Spot Code)。當 JVM 執行某一方法或遍歷循環的次數越多,就會更加了解代碼結構,那麼 JVM 在編譯代碼的時候就作出相應的優化。

熱點代碼分爲二類:

  • 屢次被調用的方法
  • 屢次被執行的循環體
  • 檢測熱點代碼:

  • 方法計數器:記錄方法調用的次數
  • 回邊計數器:記錄代碼塊循環次數
  • 當計數器數值大於默認閾值或指定閾值時,方法或代碼塊會被編譯成本地代碼。

 

  • 混合模式 默認(java -version混合模式)

  在解釋執行的模式下引入編譯執行,恰好能夠彌補相互的缺點,達到更優的效果。

  程序剛開始啓動的時候,由於解釋器能夠很快的解釋字節碼,因此首先發揮做用,解釋執行Class字節碼,在合適的時候,即時編譯器把整段字節碼編譯成本地代碼,而後,執行引擎就沒有必要再去解釋執行方法了,它能夠直接經過本地代碼去執行它。執行本地代碼比一條一條進行解釋執行的速度快不少,主要緣由是本地代碼是保存在緩存裏的。

 

image

如上圖能夠看出,整個java應用程序的執行過程以下:

  • 源代碼經javac編譯成字節碼,class文件
  • 程序字節碼通過JIT環境變量進行判斷,是否屬於「熱點代碼」(屢次調用的方法,或循環等)
  • 如是,走JIT編譯爲具體硬件處理器(如sparc、intel)機器碼
  • 如否,則直接由解釋器解釋執行

2.3 C++和Java編譯過程對比

C++是靜態編譯器,編譯結束最終生成平臺相關的機器碼,而Java的編譯生成.class文件格式的字節碼,字節碼交給JVM,JVM中的解釋器和JIT會將平臺無關的.class文件,轉爲平臺相關的機器碼。

image

C++、C#等語言執行過程以下:

image

C++會先轉爲彙編語言,再轉爲機器碼:

image

在這裏插入圖片描述

C++編譯是讀取源程序(字符流),對之進行詞法和語法的分析,將高級語言指令轉換爲功能等效的彙編代碼,再轉換爲機器代碼,生成目標文件(.obj)。分爲兩個過程:

(1)編譯: 

  • 預處理階段
  • 宏#define
  • 條件編譯指令,如#ifdef,#ifndef,#else,#elif,#endif等。
  • 頭文件包含,#include <iostream>
  • 特殊符號
  • LINE標識將被解釋爲當前行號(十進制數)

  • FILE則被解釋爲當前被編譯的C源程序的名稱。預編譯程序對於在源程序中出現的這些串將用合適的值進行替換

  • 編譯、優化階段
  • 針對代碼優化,不依賴具體計算機
  • 針對計算機優化

(2)彙編

    把彙編語言代碼翻譯成目標機器指令,生成目標文件(.o文件、.obj文件),此過程會依賴機器的硬件和操做系統環境。

 

Java不會轉爲彙編語言,而是生成字節碼,字節碼再經過JVM轉爲機器碼。字節碼是已經通過編譯,但與特定機器碼無關,須要解釋器轉譯後才能成爲機器碼的中間代碼,這是Java跨平臺的關鍵。不一樣平臺下載不一樣的JDK,裏面包含各平臺的JVM,不一樣平臺的JVM均可以處理.class文件,.class文件和虛擬機共同保證了跨平臺性。

 

3、Java的特色

最初的Oak語言爲了嵌入式而開發,可是當時的消費性電子產品市場沒法達到預期,而互聯網興起,Java針對嵌入式的特性也剛好與互聯網很搭,Java轉而以互聯網爲目標,不斷髮展,Java誕生之初就是和互聯網密不可分的,反而相對並不太適合嵌入式了。

Java的特色正是源於Java的發展目標。

 

1.面向對象

 

2.多線程

 

大多數操做系統都給一個進程產生和管理多個線程的能力,這些線程彼此獨立地完成不一樣的任務。可是,不多由程序語言提供對線程管理的直線支持,一般都須要直接調用操做系統功能。Java卻相反,直接在語言中提供了產生、管理和協調同步線程的功能。與Java的其餘特色同樣,該功能是必要的,由於設計者不敢肯定底層的操做系統是否支持多線程。

開發者愈來愈多地在程序中使用線程,將其做爲知足一個程序不能完成的,一般相互無關的一些任務的一種手段。因爲Java對線程有內置語言支持,以Java建立多線程較之與其餘語言更簡單、更天然。

多線程功能使得在一個程序裏可同時執行多個小任務。由於Java實現的多線程技術,因此比C和C++更鍵壯。多線程帶來的更大的好處是更好的交互性能和實時控制性能。固然實時控制性能還取決於系統自己(UNIX,Windows,Macintosh等),在開發難易程度和性能上都比單線程要好。任何用過當前瀏覽器的人,都感受爲調一副圖片而等待是一件很煩惱的事情。在Java裏,你可用一個單線程來調一副圖片,而你能夠訪問HTML裏的其它信息而沒必要等它。

 

3.分佈式

 

Java支持在網絡上應用,它是分佈式語言。它既支持各類層次結構的網絡鏈接,也以Socket類來支持流(Stream)的網絡鏈接。因此用戶能夠產生分佈式的客戶端與服務端。而網絡能夠理解爲軟件應用的分佈式運載工具。Java程序只須要編寫一次,就能夠處處運行。

在Java中,網絡類包括 TCP/IP流和使用TCP及UDP的數據報程序,用於HTTP和URL服務的操做方法,以及錯誤檢查代碼和恢復功能。雖然實現網絡也可能用其餘語言,好比C語言,但那些語言要求特別的附件軟件包、DLL,或其餘必須由操做系統或者第三方銷售提供的程序模塊。特別附件一般要求有操做系統或第三方工具的知識,不像Java,有標準的、內置的網絡支持。Java包括網絡包是必要的,由於設計者不能對一個做爲基礎的操做系統的網絡設施作任何假定,它們必須包括集成網絡程序庫,以確保Java程序能在全部平臺上工做。

 

4.穩健性

 

  Java設計之初是用做消費類電子產品軟件的語言,因此它被設計成寫可靠和穩健的軟件的。Java消除了某些編程錯誤,使得它寫穩健程序更加容易。Java是一個強類型的語言,它容許擴展編譯時檢查潛在類型不匹配的問題。因此Java要求顯式的方法聲明,而不是C語言那樣的隱式聲明。由於Java不支持指針,因此它消除了重寫存儲和訛誤數據的可能性。取而代之的異常處理是Java中更穩健的特性。異常(Exception)就是某種相似於錯誤的信號,但不是錯誤(Error)。對待異常,Java有兩種處理方式,捕獲(try-catch-finally)和拋出(throw/throws)。這樣就方便找到可能出錯的代碼並加以處理,從而簡化了出錯的機率。

 

5.安全


Java的安全性可從兩個方面獲得保證。一方面,在Java語言裏,象指針和釋放內存等C++功能被刪除,避免了非法內存操做。另外一方面,當Java用來建立瀏覽器時,語言功能和瀏覽器自己提供的功能結合起來,使它更安全。Java語言在你的機器上執行前,要通過不少次的測試。它通過代碼校驗,檢查代碼段的格式,檢測指針操做,對象操做是否過度以及試圖改變一個對象的類型。

 

6.可移植的


這句話一直是Java程序設計師們的精神指標,也是Java之因此可以受到程序設計師們喜好的緣由之一,最大的功臣就是JVM的技術。大多數編譯器產生的目標代碼只能運行在一 種CPU上(如Intel的x86系列),即便那些能支持多種CPU的編譯器也不能同時產生適合多 種CPU的目標代碼。若是你須要在三種CPU( 如x8六、SPARC 和MIPS)上運行同一程序, 就必須編譯三次。
但JAVA編譯器就不一樣了。JAVA編譯器產生的目標代碼(J-Code) 是針對一種並不 存在的CPU--JAVA虛擬機(JAVA Virtual Machine),而不是某一實際的CPU。JAVA虛擬機能掩蓋不一樣CPU之間的差異,使J-Code能運行於任何具備JAVA虛擬機的機器上。
做爲一種虛擬的CPU,JAVA 虛擬機對於源代碼(Source Code) 來講是獨立的。咱們不只能夠用JAVA語言來生成J-Code,也能夠用Ada95來生成。事實上,已經有了針對若干種源代碼的J-Code 編譯器,包括Basic、Lisp 和Forth。源代碼一經轉換成J-Code之後,JAVA虛擬機就可以執行而不區分它是由哪一種源代碼生成的。這樣作的結果就是CPU可移植性。 將源程序編譯爲J-Code的好處在於可運行於各類機器上,而缺點是它不如本機代碼運行的速度快。
同體繫結構無關的特性使得Java應用程序能夠在配備了Java解釋器和運行環境的任何計算機系統上運行,這成爲Java應用軟件便於移植的良好基礎。但僅僅如此還不夠。若是基本數據類型設計依賴於具體實現,也將爲程序的移植帶來很大不便。例如在Windows3.1中整數(Integer)爲16bits,在Windows95中整數爲32bits,在DECAlpha中整數爲64bits,在Intel486中爲32bits。經過定義獨立於平臺的基本數據類型及其運算,Java數據得以在任何硬件平臺上保持一致。Java語言的基本數據類型及其表示方式以下:byte8-bit二進制補碼short16-bit二進制補碼int32-bit二進制補碼long64-bit二進制補碼float32-bitIEEE754浮點數double32-bitIEEE754浮點數char16-bitUnicode字符在任何Java解釋器中,數據類型都是依據以上標準具體實現的。由於幾乎目前使用的全部CPU都能支持以上數據類型、8~64位整數格式的補碼運算和單/雙精度浮點運算。Java編譯器自己就是用Java語言編寫的。Java運算系統的編制依據POSIX方便移植的限制,用ANSIC語言寫成。Java語言規範中也沒有任何"同具體實現相關"的內容。

咱們常說Java是跨平臺的語言

咱們把CPU處理器與操做系統的總體叫平臺,不一樣的操做系統支持不一樣CPU的指令集。使用特定編譯器編譯的程序只能在對應的平臺運行,這裏也能夠說編譯器是與平臺相關的,編譯後的文件也是與平臺相關的。咱們說的語言跨平臺是編譯後的文件跨平臺,而不是源程序跨平臺,若是是源程序,任何一門語言都是跨平臺的語言了。

 

7.動態性

 

Java的動態特性是其面向對象設計方法的發展。它容許程序動態地裝入運行過程當中所須要的類。

 

4、Java與Internet

4.1 Java緣起

有心栽花花不成,無意插柳柳成蔭。

1966年,一門叫Simula的模擬語言備受人們青睞,Simula能夠把一組事件納入一個類別(classification),稱之爲「類」(class)。Bjarne Stroustrup(C++語言之父)就是Simula的使用者之一,爲了使模擬器運行得更快,他在博士論文中改寫了Martin Richard的Basic Combined Programming Language(BCPL)中的程序,並就任於AT&T公司貝爾實驗室。20世紀70年代,貝爾實驗室的一名工做人員Ken Thompson正致力於測試一門基於BCPL的新語言,稱爲B語言。Ken Thompson想給B語言添加數據類型,因而在1971年他又發展了一門新的語言,稱爲C語言。從那之後,C語言風靡全球。以致於在1983年,美國國家標準化組織甚至考慮要把它做爲該組織的一個標準(稱爲ANSI C)。1979年5月,Stroustrup開始利用類(class)來開發一種稱爲C的項目,其目的是將C的速度和他所熟悉的Simula類結合在一塊兒。1983年,C++首次投入使用。隨後,C++愈來愈普及,使用的公司愈來愈多,這其中就包括了Sun微系統公司。

 

1990年12月,Sun的工程師Patrick Naughton沒法忍受Sun C++工具,威脅離開Sun,轉投喬布斯(Steve Jobs)領導的NeXT公司。領導層爲了留住他,容許他啓動了一個叫作Stealth的項目,James Gosling等人加入了該項目,該項目後來更名爲「Green Project」。1991年4月,綠色計劃啓動,該計劃的目的是開發一種可以在各類消費性電子產品上運行的程序架構。他們認爲計算機技術發展的一個趨勢是數字家電之間的通信,爲電視、烤箱等家用電器開發一種交互式的軟件系統,這種應用須要的是那種小而可靠的系統,它可以移植,而且實時性好,適用於網絡分佈環境。C++缺乏團隊須要的特性且不易用,好比垃圾回收機制等。起初,高斯林試圖修改和擴展C++的功能,他本身稱爲C++ ++—,顯然這不是一個容易被他人接受的名字。最終,一種被命名爲 「Oak」(以他的辦公室外的橡樹命名)的全新的語言誕生了。

1992年夏天,Oak語言連同Green OS和一些應用程序一塊兒發佈在稱作Start 7的小型設備上。11月,Green計劃被轉化成了名爲FirstPerson的全資子公司。當時,時代華納發佈了一個關於電視機頂盒的項目,FirstPerson團隊開發了一個高交互性的設備投標該項目。結果,華納公司和有線電視服務商不肯意用戶擁有這麼大的控制權,從而競標失敗給了SGI,而與3DO公司另外一筆機頂盒交易也沒有成功。

1993年,美國伊利諾州伊利諾大學NCSA組織,發表了第一個能夠顯示圖片的瀏覽器,命名爲MOSAIC,在當時人氣爆發的大受歡迎,Mosaic的出現,算是點燃後來因特網熱潮的火種之一。

1994年,Gosling 等人意識到了萬維網的機會,他們認爲互聯網將將向高度互動的遠景演變,Oka進行小規模改造。94年秋,團隊中 Naughton 與 Jonathan  完成了第一個Java語言網頁瀏覽器,WebRunner,後更名爲HotJava。

1995年5月23日,因爲Oka被一家顯卡製造商註冊,Oka更名爲Java,在SunWorld大會上正式發佈Java 1.0版本,Java語言第一次提出了「Write Once,Run Anywhere」的口號。

 

4.2 互聯網和萬維網

互聯網和因特網

因特網於1969年誕生於美國。最初名爲「阿帕網」(ARPAnet)是一個軍用研究系統,後來又成爲鏈接大學及高等院校計算機的學術系統,如今則已發展成爲一個覆蓋五大洲150多個國家的開放型全球計算機網絡系統,擁有許多服務商。
普通電腦用戶只須要一臺我的計算機用電話線經過調制解調器和因特網服務商鏈接,即可進入因特網。但因特網並非全球惟一的互聯網絡。
例如在歐洲,跨國的互聯網絡就有「歐盟網」(Euronet),「歐洲學術與研究網」(EARN),「歐洲信息網」(EIN),在美國還有「國際學術網」(BITNET),世界範圍的還有「飛多網」(全球性的BBS系統)等。

咱們就能夠知道大寫的「Internet」(世界語爲「Interreto」)和小寫的「internet」(世界語爲「interreto」)所指的對象是不一樣的。當咱們所說的是上文談到的那個全球最大的的也就是咱們一般所使用的互聯網絡時,
咱們就稱它爲「因特網」或稱爲「國際互聯網」,雖而後一個名稱並不規範。在這裏,「因特網」是做爲專有名詞出現的,於是開頭字母必須大寫。但若是做爲普通名詞使用,
即開頭字母小寫的「internet」(「interreto」),則泛指由多個計算機網絡相互鏈接而成一個大型網絡。
按全國科學技術審定委員會的審定,這樣的網絡系統能夠通稱爲「互聯網」。這就是說,
因特網和其餘相似的由計算機相互鏈接而成的大型網絡系統,均可算是「互聯網」,因特網只是互聯網中最大的一個。
《現代漢語詞典》2002年增補本對「互聯網」和「因特網」所下的定義分別是「指由若干電子機網絡相互鏈接而成的網絡」和「目前全球最大的一個電子計算機互聯網,是由美國的ARPA網發展演變而來的」。


因特網(Internet)是一組全球信息資源的總彙。
有一種粗略的說法,認爲INTERNET是因爲許多小的網絡(子網)互聯而成的一個邏輯網,每一個子網中鏈接着若干臺計算機(主機)。
Internet以相互交流信息資源爲目的,基於一些共同的協議,並經過許多路由器和公共互聯網而成,它是一個信息資源和資源共享的集合。

萬維網(world wide web)

因特網是基於TCP/IP協議實現的,TCP/IP協議由不少協議組成,不一樣類型的協議又被放在不一樣的層,其中,位於應用層的協議就有不少,好比FTP、SMTP、HTTP。因此,因特網提供的服務通常包括有:www(萬維網)服務、電子郵件服務(outlook)、遠程登陸(QQ)服務、文件傳輸(FTP)服務、網絡電話等等。只要應用層使用的是HTTP協議,就稱爲萬維網(World Wide Web)。之因此在瀏覽器裏輸入百度網址時,能看見百度網提供的網頁,就是由於您的我的瀏覽器和百度網的服務器之間使用的是HTTP協議在交流。

互聯網經過TCP/IP協議把計算機鏈接到了一塊兒,而萬維網是運行在互聯網之上,基於HTML、URL和HTTP這三個協議進一步把計算機上的信息資源鏈接到一塊兒。

在TCP/IP協議上傳輸信息的方式很早就出現了,好比FTP就是經過TCP/IP傳輸文件的方式。爲何萬維網會帶來這麼神奇的效應呢?由於它第一次帶來了一種叫作超媒體(Hypermedia)的內容形態。超媒體能夠在TCP/IP協議之上的傳輸,能夠包含文字、音頻、視頻,同時能夠相互連接,是一種全新的信息表達方式。

Web設計初衷是一個靜態信息資源發佈媒介,經過超文本標記語言(HTML)描述信息資源,經過統一資源標識符(URI)定位信息資源,經過超文本轉移協議(HTTP)請求信息資源。HTML、URL和HTTP三個規範構成了Web的核心體系結構,是支撐着Web運行的基石。用通俗的一點的話來講,客戶端(通常爲瀏覽器)經過URL找到網站(如www.google.com),發出HTTP請求,服務器收到請求後返回HTML頁面。可見,Web是基於TCP/IP協議的,TCP/IP協議把計算機鏈接在一塊兒,而Web在這個協議族之上,進一步將計算機的信息資源鏈接在一塊兒,造成咱們說的萬維網。

動態頁面

不要將動態網頁和頁面內容是否有動感混爲一談。這裏說的動態網頁,與網頁上的各類動畫、滾動字幕等視覺上的動態效果沒有直接關係,動態網頁也能夠是純文字內容的,也能夠是包含各類動畫的內容,這些只是網頁具體內容的表現形式,不管網頁是否具備動態效果,只要是採用了動態網站技術生成的網頁均可以稱爲動態網頁。

動態網頁是基本的html語法規範與Java、VB、VC等高級程序設計語言、數據庫編程等多種技術的融合,以期實現對網站內容和風格的高效、動態和交互式的管理。所以,從這個意義上來說,凡是結合了HTML之外的高級程序設計語言和數據庫技術進行的網頁編程技術生成的網頁都是動態網頁。

與靜態網頁相對應的,能與後臺數據庫進行交互,數據傳遞。也就是說,網頁 URL的後綴不是.htm、.html、.shtml、.xml等靜態網頁的常見形動態網頁製做格式,而是以.aspx、.asp、.jsp、.php、.perl、.cgi等形式爲後綴,而且在動態網頁網址中有一個標誌性的符號——「?」。

特徵簡要概括以下:

(1)動態網頁通常以數據庫技術爲基礎,能夠大大下降網站維護的工做量;

(2)採用動態網頁技術的網站能夠實現更多的功能,如用戶註冊、用戶登陸、在線調查、用戶管理、訂單管理等等;

(3)動態網頁實際上並非獨立存在於服務器上的網頁文件,只有當用戶請求時服務器才返回一個完整的網頁;

(4)動態網頁中的「?」對搜索引擎檢索存在必定的問題,搜索引擎通常不可能從一個網站的數據庫中訪問所有網頁,或者出於技術方面的考慮,搜索之中不去抓取網址中「?」後面的內容,所以採用動態網頁的網站在進行搜索引擎推廣時須要作必定的技術處理才能適應搜索引擎的要求。

經常使用4種動態網頁技術

一、PHP 即Hypertext Preprocessor(超文本預處理器),它是當今Internet上最爲火熱的腳本語言,其語法借鑑了C、Java、PERL等語言,但只須要不多的編程知識你就能使用PHP創建一個真正交互的Web站點。

二、ASP 即Active Server Pages(活躍服務器頁),它是微軟開發的一種相似超文本標識語言(HTML)、腳本(Script)與CGI(公用網關接口)的結合體,它沒有提供本身專門的編程語言,而是容許用戶使用許多已有的腳本語言編寫ASP的應用程序。ASP的程序編制比HTML更方便且更有靈活性。它是在Web服務器端運行,運行後再將運行結果以HTML格式傳送至客戶端的瀏覽器。所以ASP與通常的腳本語言相比,要安全得多。

aspx是微軟的在服務器端運行的動態網頁文件,經過IIS解析執行後能夠獲得動態頁面,是微軟推出的一種新的網絡編程方法,而不是asp的簡單升級,由於它的編程方法和asp有很大的不一樣,他是在服務器端靠服務器編譯執行的程序代碼, ASP 使用腳本語言,每次請求的時候,服務器調用腳本解析引擎來解析執行其中的程序代碼,而asp.net 則可使用多種語言編寫,並且是全編譯執行的,比ASP 快,並且,不只僅是快的問題,有不少優勢。

三、JSP 即Java Server Pages(爪哇服務器頁面),它是由Sun Microsystem公司於1999年6月推出的新技術,是基於Java Servlet以及整個Java(爪哇)體系的Web開發技術。 [1]

JSP和ASP在技術方面有許多類似之處,不過二者來源於不一樣的技術規範組織,以致 ASP通常只應用於Windows NT/2000平臺,而JSP則能夠在85%以上的服務器上運行,並且基於JSP技術的應用程序比基於ASP的應用程序易於維護和管理,因此被許多人認爲是將來最有發展前途的動態網站技術。

四、CGI(Common Gateway Interface,公用網關接口)是較早用來創建動態網頁的技術。當客戶端向Web服務器上指定的CGI程序發出請求時,Web服務器會啓動一個新的進程執行某些CGI程序,程序執行後將結果以網頁的形式再發送回客戶端。
  CGI的優勢是它能夠用不少語言編寫,如 C 、C++ 、VB和Perl語言。在語言的選擇上有很大的靈活性。最經常使用的CGI開發語言爲Perl。

 

4.3 Java與Internet

《Java編程思想》第一章

 

5、Java EE

 

JCP

Java Community Process ,Java社區進程,Java標準指定組織
JCP成立於1998年,官網,由社會各界Java組成的社區,規劃和領導Java的發展,其成員能夠在這裏看到。

是一個開放的國際組織,主要由Java開發者以及被受權者組成,職能是發展和更新Java技術規範、參考實現(RI)、技術兼容包(TCK)。Java技術和JCP二者的原創者都是SUN計算機公司。然而,JCP已經由SUN於1995年創造Java的非正式過程,演進到現在有數百名來自世界各地Java表明成員一同監督Java發展的正式程序。

JCP維護的規範包括J2ME、J2SE、J2EE,XML,OSS,JAIN等。組織成員能夠提交JCR(Java Specification Requests),經過特定程序之後,進入到下一版本的規範裏面。

JSR
Java Specification Requests,Java規範請求,由JCP成員向委員會提交的Java發展議案,通過一系列流程後,若是經過最終會體如今將來的Java中。

廣義的 Java EE 包含各類框架,其中最重要的就是 Spring 全家桶,咱們這裏談論的是狹義的Java EE。

Java EE, 原名J2EE, 其核心由一系列抽象的標準規範所組成, 是針對目前軟件開發中所廣泛面臨問題的解決方案。

注意以上定義中的」抽象」(abstract)這個詞。 Java EE 只是一組接口和規範, 提供了面向開發者的 public API。

這些抽象的規範, 也能夠說成是標準。本質上, 全部的 Java EE API, 都是按照領域專家們所肯定的標準發佈的。

經過標準化, Java Specification Request 流程中的每一個 Java EE API 都通過了 Java Community Process 的嚴謹審覈. 這個過程的結果,是一組通過生產檢驗和測試後, 被認爲合理的API。

上一節介紹了什麼是JSR參考實現。 Java EE簡介 文中提到, JavaEE 是一系列抽象的規範, 如今, 每一個版本的 JavaEE 都由一個 JSR 定義, 這至關因而 JSR 的組合, 其中包括了多個JSR。

例如,Java EE 7 對應於 JSR 342。 Java EE 8 對應於 JSR 366。 因而可知 Java EE 自身也是一項經過JCP嚴格審覈的JSR。

咱們知道, 每一個JSR都必須有參考實現。

Java EE 也是同樣的, 它的實現被稱爲 應用服務器 (application server). 應用服務器本質上是Java EE規範的具體實現, 能夠執行/驅動 JavaEE 項目. Java EE 的參考實現是 Glassfish Application Server

https://javaee.github.io/glassfish/documentation

image

GlassFish的網站,寫着是Java EE的開源的參考實現

 

 

JavaEE基礎系列 https://blog.csdn.net/renfufei/category_7001413.html

相關文章
相關標籤/搜索