Java的前生今世

Java做爲一門編程語言,自誕生以來已經流行了20多年,在學習它以前,咱們有必要先了解一下它的歷史,瞭解它是如何一步步發展到今天這個樣子。html

孕育

上世紀90年代,硬件領域出現了單片式計算機系統,好比電視機機頂盒這些消費設備。這些設備的特色是處理能力和內存都有限。若是使用C++編寫程序,則對於這類設備來講過於龐大。前端

因此需求便來了,爲了適應這類設備,須要一種小型的計算機語言,Java便應運而生了。java

1991年,Sun公司的James Gosling, Mike Sheridan和Patrick Naughton發起了一個名爲「Green」的項目小組,主要用於電視機頂盒這類消費設備。web

因爲設備的處理能力和內存有限,因此要求語言短小、代碼緊湊。而對於電視機頂盒這類消費設備來講,廠商會選擇各類不一樣的CPU,因此要求語言可移植、不與特定的平臺捆綁在一塊兒數據庫

出生

Green項目組以C++爲基礎,對C++進行了一些改造,並刪除了一些不太實用、複雜繁瑣的東西,開發出了名爲「Oak」的語言,(Oka來自James Gosling辦公室外的橡樹)。編程

成長

挫折

1992年夏天,Green項目組已經可以演示Green操做系統、Oak的程序設計語言、類庫和其硬件。小程序

1992年9月,Green項目組發佈了它的第一個名爲「Start 7」的產品,該產品是一個我的數字助理設備,具備圖形界面和很是智能的遠程控制。設計模式

1992年11月,Green項目被剝離,成爲Sun Microsystems的全資子公司Firstperson。瀏覽器

可是當時的硬件生產廠商對其項目並不感興趣,Firstperson花了一年多也沒找到但願購買其技術的買家。服務器

1994年,First Person公司解散,被從新歸入Sun公司。Oak語言沒法進入市場,也被暫時擱置下來。

在這裏插入圖片描述

機遇

在上面的過程當中,Internet的萬維網也在不斷髮展。對於客戶機/服務器模型來講,萬維網須要作的是將超文本頁面轉換到屏幕的瀏覽器中。

1994年6月到7月,Sun公司的團隊看到了互聯網的發展,一些圖形Web瀏覽器的出現讓他們認爲互聯網能夠演變成他們爲有線電視所設想的相同的高度交互性媒體。通過三天的頭腦風暴後,該團隊將目標平臺從新定位爲萬維網平臺。

1994年中期,Oak語言的開發者意識到他們能夠開發一個瀏覽器,WebRunner瀏覽器誕生。

1995年,互聯網的發展帶給了Oak語言一個機遇。當時的網絡頁面是單調、死板的靜態頁面,業界但願頁面可以「靈活」起來,而且但願代碼可以經過網絡傳播進行跨平臺運行。Oak的語言短小、可移植的特色和這些需求不謀而合。

Sun公司首先推出了能夠嵌入網頁而且能夠隨同網頁在網絡上傳輸的Applet(Applet是一種將小程序嵌入到網頁中進行執行的技術)。

設計者在設計WebRunner瀏覽器具備在網頁中執行內嵌代碼的能力,這種能力能讓網頁變得「靈活」。

同年,Sun公司將Oak改名爲Java(由於Oak已經被使用了,Java一詞來自咖啡),WebRunner瀏覽器也演變成了HotJava瀏覽器,HotJava瀏覽器徹底使用Java開發。

同年5月23日,Sun公司在Sun World會議上展現並正式發佈了Java語言和HotJava瀏覽器,各大公司都紛紛中止了本身公司相關項目的開發,競相購買Java的使用許可證,併爲本身的產品開發了相應的Java平臺。

發展

在這裏插入圖片描述

1996年初,Sun公司發佈了Java的第1個開發工具包(JDK1.0),這是Java發展的里程碑,標誌着Java成爲了一種獨立的開發工具。

同年9月,約8.3萬個網頁應用了Java來製做。

同年10月,Sun公司發佈了Java平臺的第1個即時編譯器。

可是人們很快意識到Java1.0並不能用來進行真正的應用開發。

1997年2月,JDK1.1面世,它彌補了JDK1.0的大多明顯缺陷,改進了反射能力,可是仍有侷限性。

1998年12月,Sun公司發佈了第二代Java平臺——JDK1.2。這次發佈有幾個不一樣的版本,分別是標準版J2SE、用於手機等嵌入式設備的微型版J2ME、用於服務器端處理的企業版J2EE。

這次發佈是Java發展過程當中最重要的里程碑,標誌着Java的應用開始普及。

2000年5月,JDK1.三、JDK1.四、J2SE1.3相繼發佈。

2001年9月,J2EE1.3發佈。

2002年2月,J2SE1.4發佈。該版本提升了Java的計算能力,擴展了標準類庫,提升了系統性能。

在此期間,Java Applet採用低調姿態,淡化了客戶端的應用,成爲服務器端應用的首選平臺

2004年9月,J2SE 1.5版本發佈,該版本爲重大更新,是自1.1版本以來第一個對Java語言作出重大改進的版本。JavaOne會議後,版本數字從1.5改成5.0。

2005年6月,Java SE 6發佈。版本名稱發生了改變,如J2SE改成Java SE、J2ME改成Java ME、J2EE改成Java EE。該版本沒有對語言方面再進行改進,可是改進了其餘性能,加強了類庫。

2006年11月,Sun公司將Java技術做爲免費軟件對外發布。

2007年3月起,全世界全部開發人員都可對Java源代碼進行修改。

隨着數據中心愈來愈依賴於商業硬件而不是專用服務器,Sun公司在2009年被Oracle收購。

2011年,Oracle發佈Java SE 7。

2014年,Java SE 8發佈,近20年以來,該版本有了最大改變,Java 8提供了一種「函數式」編程方式,能夠很容易地表述併發執行的計算。

2017年,Java SE 9發佈。

Java 9以後,Oracle宣佈每6月更新一次版本。

2020年3月,Java SE 14發佈。

Java Web的發展

Java一路走來,爲了適應時代發展,作出了許多改變。

在早期,Java是爲了解決傳統的單機程序設計問題,但因爲種種緣由,Java後來轉向Web。

Web的最初模樣

Web爲了提供交互性內容採起了客戶端/服務器系統,可是交互性徹底由服務器提供。服務器產生靜態頁面,這些靜態頁面是事先寫好的,將其提供給可以解釋並顯示的客戶端瀏覽器。

可是咱們的需求是變幻無窮的,事先寫好的靜態頁面確定不能知足咱們日益增加的需求。

CGI

CGI(Common Gateway Interfa,通用網關接口),它是一段程序,運行在服務器上,提供同客戶端HTML頁面的接口,通俗的講CGI就像是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器,再把服務器執行的結果返還給HTML頁。

CGI使網頁變得不是靜態的,而是交互式的。

可是CGI程序的響應時間依賴於發送的數據量的大小、服務器和網絡的負載,一旦網站變得複雜起來,響應就會變得很是慢且難以維護。

Applet

Applet是一種將小程序嵌入到網頁中進行執行的技術,含有Applet的網頁的HTML文件代碼中部帶有<applet></applet>這樣一對標記,當支持Java的網絡瀏覽器遇到這對標記時,就將下載相應的小應用程序代碼並在本地計算機上執行該Applet。

在當時,Java Applet 能夠大大提升Web頁面的交互能力和動態執行能力。

Java剛出現時,Applet是最受你們歡欣鼓舞的。可是因爲當時的網絡環境的問題,安裝Java運行時環境(JRE)所須要的10MB帶寬對當時的用戶來講太過於恐怖。而且微軟的IE瀏覽器並並無包含JRE,因此Applet並無獲得大規模應用。

Servlet

Servlet(Server+Applet),即服務器端小程序。Servlet可以按照用戶提交的內容處理並返回相應的資源。能夠輸出HTML頁面,動態展現數據。Servlet實現正確的接口就可以處理Http請求。

可是出現了一個很大的問題:HTML代碼須要在Servlet類中用Java代碼一行一行輸出,表現、邏輯、控制、業務等所有在Servlet類中,形成Servlet類代碼混亂(HTML代碼、Java代碼都寫在一塊兒),重複性高、閱讀性差、開發困難。

下面是使用Servlet在瀏覽器中輸出有一個h1標題的Hello World!字符串的HTML頁面。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    response.setContentType("text/html;charset=utf-8");
    out.println("<html>");
    out.println("<head>");
    out.println("<title>$Title$</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Hello World!</h1>");
    out.println("</body>");
    out.println("</html>");
}

可想而知,更復雜的頁面得寫多少代碼!

JSP

爲了解決上面的問題,Sun公司開發出了JSP。

JSP(JavaServer Page)是一種動態網頁技術標準。JSP部署於網絡服務器上,能夠響應客戶端發送的請求,並根據請求內容動態地生成HTML、XML或其餘格式文檔的Web網頁,而後返回給請求者。JSP技術以Java語言做爲腳本語言,爲用戶的HTTP請求提供服務,並能與服務器上的其它Java程序共同處理複雜的業務需求。

能夠將JSP頁面當作是一個能內嵌Java代碼的HTML頁面。

靜態部分(HTML頁面)是模板,能夠提早寫好,動態部分(數據)能夠由Java代碼動態生成。這樣一來就避免了在單純使用Servlet時HTML代碼和Java代碼都出如今Servlet類中的混亂狀況。

JSP在運行時被轉換成Servlet,所以JSP本質是Servlet。

下面是使用JSP作和上面一樣的事情:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

仍使用HTML模板,但不是用Java語句一行一行「堆」出來,這多方便!

使用了JSP後,雖然不用一行行地「堆」HTML頁面了,可是代碼混亂的問題仍沒有解決。表現、邏輯、控制、業務等代碼仍然寫在一塊了,只不過是從Servlet類中挪到JSP中了。

在這裏插入圖片描述

這樣混亂的代碼極不利於團隊開發,若是項目很小,那還能理順,但若是項目很是大的話,那就「剪不斷,理還亂了」。

因此這時候,咱們急需將代碼分門別類的碼放整齊。

JSP + JavaBean(Model1模式)

JavaBean 是用Java語言寫成的可重用組件,JavaBean類要求:

  1. 類是公開的
  2. 具備私有成員變量
  3. 具備無參構造器
  4. 具備setter和getter方法

上面已經說了,單純使用JSP會有大量的HTML代碼和Java代碼耦合在一塊兒,不利於開發、維護、分工協做。

咱們舉一個登陸的例子:

登陸大體須要如下幾步:

  1. 在瀏覽器中輸入用戶名、密碼
  2. 獲取數據,交給服務器
  3. 把數據處理成合適的形式
  4. 查詢數據庫的用戶表,看是否有一條用戶名和密碼都符合輸入的記錄。若是有,則登陸成功。

單純使用JSP時,以上步驟所有在JSP登陸頁面中完成,該頁面既須要顯示登陸表單、又須要獲取、處理數據、還須要查詢數據庫。太亂了!!

有了JavaBean,咱們能夠將JSP中大量重複的代碼抽取成可重用的組件,封裝成JavaBean,在必定程度上減輕了代碼的耦合度,也在必定意義上實現了分層
在這裏插入圖片描述

好比,用戶自己就是一個對象,咱們能夠將其抽取成JavaBean,數據的傳遞、查找均可使用JavaBean來完成。

在這裏插入圖片描述

JSP+Servlet+JavaBean(Model2模式——MVC模式)

上面介紹了Servlet、JSP、JSP+JavaBean,雖然在進步,可是都不盡如人意。那爲何不讓它們結合起來取長補短?

咱們之因此使用JavaBean,就是爲了讓Java代碼和HTML代碼分離開了,而Servlet也是一個Java類,爲何不使用它呢?

JSP+JavaBean已經實現了部分分層,使用MVC(Model-View-Controller)模式能進一步分層。

Model(模型):MVC模式的中心組件,處理數據和邏輯。(好比JavaBean,但不止只有JavaBean)

View(視圖):展現數據,渲染頁面。(前端頁面,好比HTML頁面、JSP頁面)

Controller(控制器):從View接收數據,向Model發送數據,即用於控制數據分發。(好比Servlet)

在這裏插入圖片描述

還用上面的登陸例子:

  1. 將JSP登陸頁面做爲View

  2. Servlet類(Controller)用於接收用戶輸入的用戶名、密碼,將其封裝爲用戶類(JavaBean),而後去數據庫中查詢。若是能查詢到則登陸成功。

  3. 將查詢結果返回給Controller,Controller根據查詢結果選擇一個合適的View,並將數據渲染到頁面,展現給用戶。(在本例中,若是查詢成功,則進入系統主頁;若是查詢不到,則用戶會看到一個登陸失敗頁面)

使用了MVC設計模式後,代碼有了明顯的分層,結構清晰,各司其職。

框架

爲了減輕工做量,各類框架逐漸出如今人們的視野中。

所謂框架,能夠把它看作一個半成品的項目/軟件,框架中有許多東西別人都已經幫咱們寫好了,好比各類類、方法。

咱們要作的就是去了解、學習框架,在寫好的框架的基礎上、遵循框架的制定好的規則、按照本身的思路、結合框架的思想、去開發咱們本身的項目。

目前Java的Web開發中最出名的框架就是Spring家族了,好比SpringMVC、Spring、SpringBoot。

熟悉、利用這些框架可以幫助咱們快速、優雅地開發出符合需求的項目。

另,框架是別人寫好的輪子,有了它,咱們可以跑得更快,可是別忘了怎麼走。

總結

說了這麼多,至關於陪着Java從出生到如今走了一遍。咱們能夠看出Java的發展也不是一路順風的,我認爲Java之因此如今還這麼流行,緣由之一就是它可以一直保持更新,一直在根據時代的需求結合自身的特色不斷地作出改變。正如那句話「窮則變,變則通,通則達」。一門語言能作到這樣,身爲人更應該要作到。

若有錯誤,還請指正。

參考資料:

  1. 百度百科
  2. 維基百科
  3. Java官方文檔
  4. Java核心卷一(第10版)
  5. Java編程思想(第4版)

文章首發於公衆號『行人觀學』
在這裏插入圖片描述

相關文章
相關標籤/搜索