Web發展簡史((webapp+Java原生)移動(dòng)端開發 )+web網站(zhàn)) - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 網站(zhàn)建設 >

Web發展簡史((webapp+Java原生)移動(dòng)端開發 )+web網站(zhàn))

發表時間:2019-4-1

發布人:葵宇科技

浏覽次數:15

Web發展簡史--------->((webapp+Java原生)移動(dòng)端開發(微信小程序,公衆号,頭條app))+web網站(zhàn))

Web發展簡史

1:在那時,Web開發還比較簡單,開發者經常會去操作web服務器(qì)(主要還是他自己的機器(qì)),并且他會寫一些HTML頁面放到服務器(qì)指定的文(wén)件夾(/www)下(xià)。這些HTML頁面,就在浏覽器(qì)請求頁面時使用。(當時隻能獲取HTML,靜态頁面)

2:問(wèn)題就出現了,你(nǐ)隻能獲取到靜态内容。倘若你(nǐ)想讓訪問(wèn)者看到有多少(shǎo)其他訪問(wèn)者訪問(wèn)了這個(gè)網站(zhàn)呢(ne)(還記得那些統計流量的旋轉圖片嗎?!),或者倘若你(nǐ)想讓訪問(wèn)者去填寫這樣一個(gè)表單,包含有姓名和(hé)郵件地址呢(ne)?于此就轉向了CGI和(hé)Perl腳本,在web服務器(qì)端運行一段短(duǎn)小的代碼,并能與文(wén)件系統或者數據庫進行交互(可(kě)以交互啦!提交個(gè)表單,查看個(gè)信息)

3:當時組織CGI/Perl這樣的腳本代碼太混亂了。CGI伸縮性不是太好(經常是為每個(gè)請求分配一個(gè)新的進程),也不太安全(直接使用文(wén)件系統或者環境變量),同時也沒提供一種結構化的方式去構造動(dòng)态應用程序。幾年來一直很困惑,直到大約2005年左右,出現了Java Server Pages(JSP),微軟的ASP,以及PHP!我喜歡把當時的參考架構比作成IIS和(hé)ASP.NET,你(nǐ)可(kě)以用Visual Studio快速構建一個(gè)可(kě)伸縮并且安全的應用程序。(因為cgi交互不怎麼好,所以在服務器(qì)上開始寫(jsp,asp,php動(dòng)态語言代碼了進行幫助查找數據,查找圖片,動(dòng)态語言效率更高))

4:直到當時,web服務器(qì)多半會返回整個(gè)頁面或者文(wén)檔,但AJAX(2005)的出現,讓事情變得很有意思。AJAX允許客戶端的JavaScript腳本為局部頁面提供請求服務,然後可(kě)以在無需回到服務器(qì)情況下(xià)動(dòng)态刷新部分頁面,也就是更新浏覽器(qì)中(zhōng)的document對象,通(tōng)常稱作DOM,或者文(wén)檔對象模型。(javascript的出現讓用戶更加快速的更改,修改頁面内容,而不用再去訪問(wèn)WEB服務器(qì)去請求,返回HTML修改頁面啦!javascript訪問(wèn)更快)

雖然從服務器(qì)端返回的仍然是HTML,但浏覽器(qì)上的代碼能把這HTML片段内嵌到當前頁面中(zhōng)。也就是說web應用的響應可(kě)以更快,這時我們真正用web應用取代了web頁面。谷歌的GMail和(hé)谷歌地圖都是當時AJAX的殺手級産品。随後用AJAX局部刷新就如(rú)雨後春筍般出現。

5:在随後的幾年時間裡,AJAX成為了焦點,但在服務器(qì)端仍然使用着舊有的技術(shù)。大概在2007年,37signals公司公開其成員–Ruby>(這時候後台框架打開了新的大門,後端框架先被提出來的,現在的前端趨勢也開始要有MVC的前端框架啦!WEB前端全棧開發,node.js直接訪問(wèn)數據庫,mongo數據庫,)

6:在2007到2010年期間,湧現了3種開發潮流:

第一個(gè)是智能手機和(hé)移動(dòng)應用潮流。通(tōng)常情況下(xià),許多應用程序同時有web和(hé)移動(dòng)應用兩種版本。盡管如(rú)此,服務端仍然返回的是HTML頁面,而不是其它移動(dòng)應用可(kě)以識别。因此,你(nǐ)需要返回的是結構化數據來取代HTML。

第二個(gè)開發潮流是jQuery。這是一個(gè)非常流行的JavaScript庫,能夠很容易構建動(dòng)态、美妙的web應用,甚至是AJAX!

第三個(gè)潮流是Node.js的發布。這是第一次能讓你(nǐ)用JavaScript開發高性能的服務端程序,進而可(kě)能結束“客戶端開發者”要知道HTML/JavaScript,“服務端開發者”要知道.NET/C#/Ruby這樣的噩夢。(json是服務器(qì)向浏覽器(qì)返回的一種數據結構,浏覽器(qì)解析json提取裡面的key-value鍵值對,服務器(qì)端(jsp,php)可(kě)以把數據庫裡面的數據封裝到json中(zhōng),發給浏覽器(qì))

7:盡管這是一個(gè)不錯的架構,但我們可(kě)以重用一些在客戶端的收獲去簡化那些曾經發生在像客戶端意大利面似的jQuery代碼。和(hé)Rails精神類似,我們需要用一種規定的方式從服務端獲取到數據,再對客戶端的HTML頁面進行包裝。因此,在接下(xià)來的2年時間裡,業(yè)界出現了許多用于簡化客戶端開發的框架,諸如(rú)Backbone,Ember,Derby和(hé)Meteor,當然也包括我的最愛,AngularJS,vlue.js。(這些東西訪問(wèn)數據庫,把數據從服務器(qì)取出到浏覽器(qì),浏覽器(qì)MVC再去解析數據)

8:因此,這就是我們看到的今天,而我後面要講到的參考架構是這樣的,mongodb作為數據庫服務器(qì),node/express作為web應用服務器(qì),客戶端使用AngularJS,同時也使用Bootstrap樣式風格。我發現這種架構允許我能夠快速構建web服務以及基于AngularJS的客戶端接口,甚至和(hé)其它的服務,如(rú)PhoneGap或者其它原生移動(dòng)開發工具一樣,進行移動(dòng)應用的開發。(這種開發模式越來越可(kě)以快速開發啦!應用到webapp開發,這些前端一般用于業(yè)務型強,主要用于給用戶展現内容和(hé)數據,業(yè)務型比較強的。移動(dòng)端開發還有Java原生開發的,主要用于邏輯性強的。Java安卓原生開發(處理密碼處理,過濾什麼的)邏輯性比較強的應用。現在APP可(kě)以使用混合式開發(webapp(html+css+javascript(mui移動(dòng)端js框架)+node.js+mongo)+原生Java開發),現在網站(zhàn)開發用的還是html+css+javascript(包括js框架)前端+後端(ssh+ssm+springboot框架))。這就是現在主流的開發模式。

https://blog.csdn.net/zzzkk2009/article/details/9849431 經典的安卓移動(dòng)端開發(web+Java原生開發)web系統發展曆史

https://blog.csdn.net/z742182637/article/details/52055970 也是web系統開發曆史(不怎麼清晰,不是太好)

https://blog.csdn.net/youngyouth/article/details/84755278#web_5 web服務器(qì)架構的發展曆史

1. 靜态頁面時代

大學時候,上機還得換卡穿拖鞋,Novell的網絡是很神奇的,然而更神奇的是通(tōng)訊原理老師(shī)半神秘的講他上 Internet,“Cernet(教育網)有條64K的出口,半年前還很快,現在已經比較卡了”。就這樣,我們用Netscape指向Yahoo。那是一個(gè)HTML加圖片的世界,充斥着各種花(huā)哨閃耀的字體和(hé)鞠躬的小人,藍色連接點擊後會奇幻的變色。

我們開始用不熟練的HTML和(hé)簡陋的設計來設計網頁,并且知道這邊有個(gè)浏覽器(qì),那邊有個(gè)叫WebServer的東西,但管理Sun工作站(zhàn)的機房(fáng)老師(shī)總是盯的很緊,不會讓你(nǐ)動(dòng)系統半分。聽說有個(gè)叫Linux的神奇東西,好吧我想嘗試,可(kě)是我隻有一台攢的電腦,以及若幹張5寸3寸的軟盤。我至今感謝一位師(shī)兄,他幫我下(xià)載并切分了一個(gè)版本的Mandrake,就這樣室友看到非常奇怪的一幕,我奔波在機房(fáng)宿舍之間,仔細計算容量來拷貝,就這樣在假期裡我第一次搭建了Apache。

2. CGI時代

很快頁面上流行一個(gè)叫做計數器(qì)的東西,免費的收費的建站(zhàn)網站(zhàn)都把它當作賣點,“立體超炫變色時尚計數器(qì)”,很快我們看到幾乎每個(gè)頁面都有了一個(gè)點擊量在88888的酷裝置,隻是無論怎麼點都不會變化。而校(xiào)園裡張貼着令人眼紅的廣告,“征人寫CGI程序,一支500元!“。

慢慢的,知道了CGI是利用進程間輸入輸出通(tōng)信,和(hé)WebServer進行通(tōng)信,從而可(kě)以寫程序來控制頁面輸出的内容。但在當時會給硬盤分區就在中(zhōng)關(guān)村(cūn)被看成電腦高手的年代,實在是會者寥寥。即便到了今天,我依然對Perl敬而遠(yuǎn)之。一些前輩用C寫出更高級的CGI應用,比如(rú)WebMail,挖到第一桶金,成為今天互聯網的先驅。

3. PHP露出鋒芒

說實話,我認為PHP是最受益于互聯網浪潮的語言,在合适的時間和(hé)好夥伴Mysql一起出現。利用Apache的模塊mod-php,将php作為web服務器(qì)的一部分運行,效率和(hé)維護性都達到很好的提升。腳本語言成為互聯網前端開發主力一直到今天。PHP和(hé)大哥Perl,以及兄弟Python,Ruby一起盤據在編程語言排行榜5-10名位置。

同樣的Mysql也是時代的嬌子(zǐ),它快速靈活易用成為網站(zhàn)數據庫的首選,但很長時間裡,Mysql被其他數據庫诟病,别說Oracle等高富帥,即便是同為開源的Postgres社區裡,也會有這樣的聲音,“不支持事務也叫數據庫?”。沒關(guān)系,開源社區很快為其加入各種引擎,如(rú)今Mysql絕對是裝機總量第一的數據庫。

4. J2EE

Java時代來臨,一杯咖啡,一個(gè)可(kě)跳動(dòng)的小精靈牽動(dòng)了所有的大型軟件公司。沒錯是所有,包括微軟,Sun公司一時星光無限,所有的開發人員都在談Java。人們對其桌面表現失望進而質疑時,J2EE及時出現了,Servlet+JSP快速成為Web開發的好用技術(shù)。能夠跨平台,獨立解包使用的Web服務器(qì),挂接任意數據庫的JDBC接口,一時世界變得很美好。

微軟的ASP也出現了,一開始也是腳本解釋,和(hé)PHP等技術(shù)類似。很快微軟的C#和(hé)dotNET戰略出台,ASP也升級為ASP.Net,從此dotNET和(hé)J2EE是競争者,更是一對站(zhàn)在相同站(zhàn)壕的朋友,互相學習和(hé)抄襲對方的技術(shù)和(hé)設計,直到今天。

5. Web層框架百花(huā)齊放

Servlet是一個(gè)優異的Web技術(shù)規範,但面對叢多的開發需求,還是不能很好的覆蓋。Struts框架很快成為主流,今天我們依然看到很多.do後綴的頁面。Struts主要做了三件事,一是對請求Url進行很好的梳理,通(tōng)過Command模式把請求指配到Action對象上,并可(kě)以用同期出現的Ioc框架進行注入。二是梳理出若幹有用好用的Intecepter,并可(kě)以自由組合構成自己的Stack。三是對頁面流轉流程通(tōng)過xml的方式可(kě)以靈活定義。

同期,數以百計的各種框架出現了,多數都是針對Servlet的空白點,在幾個(gè)方面進行代碼或者配置的約定,可(kě)謂百花(huā)齊放,百家争鳴,我想Java社區能到今天依然繁榮,這種海納百川,開放的态度是根本原因。如(rú)今很多框架已經走過生命期,但還有很多活躍的,其中(zhōng)Webwork即Struts2,和(hé)SpringMVC是模闆技術(shù)類别最出色的。GWT,Wicket等在頁面組件類表現不錯,還有脫離(lí)Servlet束縛Play等框架。

6. WithoutEJB

J2EE裡,除了Servlet外另一個(gè)重量級的規範就是EJB。EJB設計的來源是Corba技術(shù),分布式對象技術(shù)在EJB規範中(zhōng)有完整的體現。Rod在著作中(zhōng)對EJB規範粗重龐大難用提出各種質疑,尤其是針對其強制分布的要求。我的觀念是分布式支持沒有錯,現在EJB規範中(zhōng)對于Local和(hé)Remote的劃分定義是正确的。開發人員應該一開始就需要了解接口粒度的劃分,本地和(hé)遠(yuǎn)程接口是不同的。對于一般的小型應用,Servlet和(hé)EJB容器(qì)都在一個(gè)虛拟機中(zhōng),本地接口是合理的,但對于大型企業(yè)應用和(hé)互聯網級别應用,勢必需要服務的遠(yuǎn)程劃分和(hé)調用。所以早期的EJB,可(kě)以說一方面設計不完備,另一方面又過度設計。但EJB自從3以後完全脫胎換骨,成為設計良好的規範。

Spring作為開發框架,把Ioc和(hé)AOP能力發揮的淋漓盡緻,在各個(gè)層次很好融合其他技術(shù)和(hé)項目庫,一直是Java Web開發的主流。不過面對CDI等JavaEE規範,在注入,生命期管理,對象解耦等優勢不在。我預計今後Spring, JavaEE和(hé)Osgi會在主流Java開發框架方向競争,也會相互借鑒和(hé)融合。

7. Ajax

Javascript是浏覽器(qì)正統的腳本語言,但在那個(gè)機器(qì)性能不佳的年代,一段Js代碼造成鼠标沒有響應的情況比比皆是。Js的給人影響就是頁面上飄來飄去“點擊我”對話框,頁面上走馬燈效果的變色通(tōng)告,或者是幾十層模态對話框的惡意頁面,很多網吧的機器(qì)默認Js是禁用的。在很長的一段時間裡,Java web開發一個(gè)潛規則就是少(shǎo)手寫Js文(wén)件,這樣可(kě)以很好的支持多種浏覽器(qì)和(hé)提高效率。

谷歌火了,Ajax也成為火爆的前端技術(shù),我們在使用gmail,google map等産品時,有了另一種體驗,點擊鍊接或按鈕後,即便網絡不算流暢,頁面不再全白重新刷新,而是内容漸漸的出現。其原理就是利用Js腳本到後台服務器(qì)獲取數據,在浏覽器(qì)前端對數據進行解析和(hé)渲染,在這個(gè)過程中(zhōng),大多數頁面并不需要進行改變,隻是更新頁面中(zhōng)一部分即可(kě)。谷歌公司大力支持Firefox使其重生,并和(hé)蘋果一起發展webkit項目,各自發展了chrome和(hé)safari浏覽器(qì),伴随者頁面渲染能力大力提升同時,Js腳本的解析能力也突飛猛進。我個(gè)人認為Ajax這個(gè)技術(shù)看似簡單,但卻是新一代Web,所謂Web2.0的基石性質技術(shù),為互聯網泡沫後互聯網的複興和(hé)今日騰飛起到了重要作用。

8. Ruby and Rails

快速成長的互聯網需要快速的web開發能力,Rails框架出現了,同時火爆的還有Ruby語言,它的出現滿足了當時開發者的需要,快速開發,玩cool的東西,有完備的後端模型支持。讓我們仔細分析一下(xià)Rails中(zhōng)MVC就能發現,Model中(zhōng)對實體對象的關(guān)系定義,和(hé)JavaEE的JPA很多概念一緻,但利用Ruby語言的元能力,可(kě)以直接對實體對象進行功能擴展,而其時Java社區還在為貧血,充血對象争論不休。Control,View等層次也能和(hé)Java的一些框架概念一緻,不過有些設計構思更巧妙,而且Rails的基因就是滿足互聯網開發需要,和(hé)JavaEE企業(yè)級應用有所不同。

很快的,各種語言紛紛出現模仿Rails的項目,Java的Grails, SpringROO,JBossForge,Python的Django,PHP的Symfony等等。毫無例外的,能有影響力的都是開源的,有良好社區能力建設的項目。

9. JSF和(hé)CDI

讓我們回到企業(yè)應用開發,大家有沒有想過所謂企業(yè)應用和(hé)互聯網應用之間最大的差别是什麼?我認為是用戶數量級别的差異,導緻前端設計方式,軟件體系,後台數據庫,緩存技術(shù)應用,有不同的設計理念和(hé)方式。用更技術(shù)化來說,就是會話和(hé)事務。企業(yè)應用是有強會話和(hé)事務需求的,而這兩個(gè)技術(shù)詞語也會一并關(guān)聯存在。很簡單,在一個(gè)事務中(zhōng)會經過多次會話過程,直到這個(gè)事務全部做完。和(hé)我們日常辦事是一樣的,填單子(zǐ),和(hé)辦事人員溝通(tōng),修改單據,蓋章,各種口舌,最終感慨,辦事真難。

從軟件層面考慮,一個(gè)企業(yè)應用軟件可(kě)能用戶數并不太多,就企業(yè)中(zhōng)百十号人,但前後台的交互是長時間,多次會話交互的。JSF技術(shù)其實是借鑒了微軟ASP.net,它們繼承了傳統IDE快速開發的思路(lù),希望通(tōng)過拖拽連接可(kě)以快速開發一個(gè)應用。頁面上的組件,對應後台服務器(qì)的業(yè)務組件,在得到服務器(qì)請求之後,組件需要做一系列動(dòng)作來完成解析,校(xiào)驗,模型重建,業(yè)務方法調用,頁面渲染等步驟,這些必然有個(gè)較長的過程。複雜性,效率,和(hé)其他技術(shù)的融合,JSF技術(shù)從誕生起就被質疑不斷,而且面對每個(gè)明星技術(shù),都有些格格不入,比如(rú)Ajax出現了,而JSF要求的Post方式還需要重刷頁面。但JSF一直在改進,越來越科學完善。如(rú)今,配合CDI,JSF是企業(yè)應用開發的首選技術(shù)之一,大家可(kě)以研究一下(xià)Oracle的應用産品和(hé)ADF開發框架。

CDI是Seam框架的技術(shù)精華形成的JavaEE規範,在JavaEE7裡面已經成為最重要的規範之一。和(hé)Hibernate最終形成JPA一樣,CDI也是GavinKing構思,開發推動(dòng)的。仔細分析就會發現,CDI幾乎彌補了JavaEE在現代開發需求中(zhōng),對象方面定義的絕大多數不足,比如(rú)和(hé)DI規範定義了注入,生命期管理和(hé)會話範圍定義,完善了EJB對于普通(tōng)POJO對于事務,異步通(tōng)知機制的定義,還有注解的堆疊定義,裝飾模式等等。有時候我就在想,假如(rú)JavaEE是GK從頭打造,我們開發人員會少(shǎo)走很多彎路(lù),因為他對企業(yè)應用的理解和(hé)用Java構建框架和(hé)定義規範,都是貼近一線開發人員需求。唯一遺憾的就是CDI還沒有推動(dòng)完成,他轉移興趣玩起語言了。關(guān)于JSF和(hé)CDI,我建議做相關(guān)産品的朋友,即便不用這樣的組合,最好也對其技術(shù)基本内容有所了解,我想對思路(lù)擴展是非常有好處的。

10. Netty,NodeJs,Vertx和(hé)異步化趨勢

Netty的領導者和(hé)Mina的主力開發者TrustLee,是一個(gè)說話慢條斯裡的韓國人。面試時問(wèn)我一個(gè)關(guān)于volatile問(wèn)題,雙方都覺得非母語很别扭,所以就都簡單表達一下(xià)就算。可(kě)我沒想到這個(gè)同齡的開發人員,日後對Java在互聯網公司的地位提升,起到這麼大的作用,這個(gè)項目就是Netty。我們都知道Java異步集合庫的作者DougLea的功勞,Nio1代,對于Socket的異步化還不是很完善,即便是Nio2,工作重心還是文(wén)件系統的異步化處理,網絡層的異步化設計逐步加強改進。因為Java的設計理念,正交化,接口堆疊,底層功能平台統一化等給異步分布式網絡框架留出足夠的空間去發揮,Netty,Mina,Grizzly等項目紛紛出現。Twitter宣布從Ruby轉向Scala,并使用Netty讓其大紅大紫。

所謂異步網絡框架,就是對網絡層調用,進行異步化,并進行接口封裝,使得容易理解和(hé)使用。異步能力還是通(tōng)過Java虛拟機現有功能實現的,通(tōng)過對數據流的處理和(hé)狀态感知來進行處理,而不是傳統的阻塞式的收發消息。這個(gè)符合我們生活中(zhōng)的感受,當你(nǐ)訂票時,你(nǐ)會打電話告訴你(nǐ)需要什麼,說訂好票給我電話,然後你(nǐ)就去做别的事情,直到訂票員通(tōng)知你(nǐ)訂好了來支付取票再進行下(xià)一步操作,如(rú)果訂票是同步的,那你(nǐ)就要一直等待訂票完成,遇到春運可(kě)能會搭上整天的時間。

為什麼異步網絡框架也受到重視,答案也是互聯網,數以億計的請求點擊湧來時,傳統的webserver頂不住了,采用一個(gè)線程服務一個(gè)請求模型的webserver,無法承受這麼大的數據訪問(wèn),特别對于Java這樣的吃(chī)内存語言,一個(gè)請求占用了一個(gè)線程,同時也占用了相對應的若幹資(zī)源。用企業(yè)應用的設計的整個(gè)架構面對互聯網級别的應用時,有點崩潰的感覺。解決高并發大量請求的途徑是高吞吐量加上可(kě)擴展的軟件架構。異步化可(kě)以提升吞吐量,就和(hé)銀行的排隊機一樣,顧客來了得到排隊服務,當有可(kě)用的櫃台服務時會主動(dòng)通(tōng)知顧客,我們可(kě)以設想,即使有再多的顧客,也可(kě)以通(tōng)過增加業(yè)務櫃台,少(shǎo)許增加排隊機和(hé)少(shǎo)量人工協調處理來解決。

NodeJs是一個(gè)異步化的基于Javascript的開發框架,是當前的明星技術(shù),符合了一些當前開發需求,如(rú)異步化,前端Js技術(shù)廣泛應用,Js引擎能力極大提升,NoSQL的火爆,組件構建模式變化等。利用Js語言函數式編程能力,Js開發人員可(kě)以很輕松的利用已有的組件開發後端應用,前端可(kě)以直接用浏覽器(qì)處理Js,别忘了Js是浏覽器(qì)唯一能統一識别的腳本語言,或者用JQuery,AngularJS等流行框架,世界很清淨,都是Js。

但我們需要了解在常駐内存服務型程序方面,Java等語言占有極大優勢,Java社區很快出現了和(hé)NodeJs有相同設計思路(lù)的項目,Vertx就是其中(zhōng)的優秀代表。它充分借鑒了NodeJs和(hé)Erlang/OTP Actor模型的優秀設計,利用分布式消息機制進行對象間通(tōng)信,利用Netty進行網絡異步操作,方法調用倡導異步調用,有自己的模塊化機制。這樣,Java社區出現了和(hé)NodeJs競争的技術(shù)框架,良好使用,可(kě)以解決大規模互聯網應用的需求。

Java領域的異步化趨勢可(kě)以說剛剛開始,我們看到Servlet和(hé)EJB都加入異步支持,Spring的Reactor,JBoss的undertow,随着Java8對函數語言能力的增強,可(kě)以預見又會有叢多的項目産生。我關(guān)注着異步化趨勢和(hé)JavaEE開發方式的融合之路(lù),相信那是Web開發的明天。

相關(guān)案例查看更多