天天看點

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

本系列文章将整理到我在github上的《java面試指南》倉庫,更多精彩内容請到我的倉庫裡檢視

https://github.com/h2pl/java-tutorial

喜歡的話麻煩點下star哈

文章首發于我的個人部落格:

www.how2playlife.com

本×××術江湖】的《走進javaweb技術世界》其中一篇,本文部分内容來源于網絡,為了把本文主題講得清晰透徹,也整合了很多我認為不錯的技術部落格内容,引用其中了一些比較好的部落格文章,如有侵權,請聯系作者。

該系列博文會告訴你如何從入門到進階,從servlet到架構,從ssm再到springboot,一步步地學習javaweb基礎知識,并上手進行實戰,接着了解javaweb項目中經常要使用的技術群組件,包括日志元件、maven、junit,等等内容,以便讓你更完整地了解整個javaweb技術體系,形成自己的知識架構。為了更好地總結和檢驗你的學習成果,本系列文章也會提供每個知識點對應的面試題以及參考答案。

如果對本系列文章有什麼建議,或者是有什麼疑問的話,也×××術江湖】聯系作者,歡迎你參與本系列博文的創作和修訂。

<!-- more -->

如果你是70、80後的程式員,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90後,那你更要看看這篇文章,因為你能找到java web發展的曆史。

言歸正傳,java語言能長期霸占語言排行榜一個重要的原因就是強大的web開發能力,web開發是java的基石(在ejb推出的時候當時的sun用基石來描述ejb),是以了解java web開發原理是非常重要的。如果僅僅跟大家聊java web開發原理未免有點單薄,今天我将把java web開發包含的主體内容跟頭條的讀者一起分享一下(一直計劃寫關于java web的文章,一直也沒時間寫,今天就當時開個頭吧)。

web開發的曆史其實并不久遠,要搞清楚java web開發的特點(主要是優點),首先要了解web開發的曆史(簡單的回歸一下)。早期的web是非常簡單的結構,使用者送出請求(request),伺服器給出回應(response),這個時期的web應用,我們稱為web site(網站),特點是一些列靜态内容的集合。看一個圖示:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

圖中的伺服器保持了一系列html腳本來響應使用者的請求,可以說這個時期的web應用還是比較簡單的,但是卻确立了兩個重要的對象:一個request(代表請求),另一個是response(代表回應)。如果把web開發的曆史比喻成一部美國大片的話,那麼request和response絕對是這部大片的那女主角,而且每一部都是不可或缺的主角(簡單的說就是死不了)。

看到這個圖,不知道第一批從事web開發的80後是否和我一樣,已經有點感觸了,當年為了搞清楚這個結構,曾經連續多少個通宵做實驗(實驗環境比較惡劣)。沒關系,這僅僅是個開始,我想當你看完這篇文章的時候,你會淚流滿面的(相信我)。為了配合一下這張結構圖,在web發展過程中,有一個小插曲,就是在web site向web application發展的過程中,出現了一個小“玩意兒”,就是applet,很多人了解java都是從使用java applet開始的(70,80後那一批程式員)。當時風靡校園(我當時在讀大一)的網易聊天室,哎呀那個火啊(大家回憶一下你在學校機房上網時的興奮),這個聊天室就是采用了applet建構的,當時applet給靜态頁面一個動态互動的可能,着實火了一段時間。現在知道applet的程式員,你已經暴露年齡了。看一張圖檔吧:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

我想這個時候,淚點低的70、80後已經有點濕潤了吧。濕潤的,自覺在這裡停留一分鐘,對着螢幕來張合影,發個朋友圈。

過了這個插曲,真正的三層web開發來了,一個裡程碑式的web處理方式cgi,看一張圖:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

cgi的推出,使得web開發正式進入了動态處理時代,伺服器能與客戶有真正意義上的交流了,有能存儲資料的資料庫了,雖然cgi的使用周期并不長,但是一定要紀念一下它,畢竟它是裡程碑式的變革。java web技術正是踩着cgi的肩膀來到了廣大程式員的面前,java web解決了cgi的性能問題。cgi是以程序為機關管理請求的,而java web則是以線程為機關,處理能力更強,占用的資源更少,這個核心的元件就是servlet。看一組資源占用圖,先看cgi的:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

再看一下java web中的servlet資源圖:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

孰優孰劣一目了然,servlet解決相同數量的請求,卻占用較少的系統資源,這就是為什麼廣大程式員抛棄了cgi轉向java web的原因。

另外,開發一個servlet并不複雜,看一個servlet編寫的helloworld應用:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

這個代碼結構是不是很親切,是不是很有coding的感覺,其實servlet就是個java 類而已,隻不過增加了幾個限制而已,是以開發一個servlet并不複雜。然後就是把它部署到web伺服器上(tomcat這個老人家現在身體依然硬朗!),然後就等待客戶的請求就可以了。這是servlet的三層部署圖:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

java web開發的技術體系還包括javabean和jsp,采用mvc結構來組合這三個技術是java web開發的基礎内容,先看一下mvc的功能圖:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

再看一下組合使用servlet+javabean+jsp的model2開發結構:

走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

這個結構是标準的java web開發結構,現在是不是很少能看到這麼“幹淨”的描述圖了?以上就是标準的java web 開發的曆史描述,當然這并不是說這些内容已經過時了,反而它一直是官方的标準解決方案。隻不過web發展迎來了另一個階段,繁榮的開源架構時代來了。。。

這個時代的典型代表就是struts、spring和hibernate,簡稱ssh。

嚴格的說,這部分内容并不是官方解決方案,但是這些方案卻得到了廣大程式員的擁護,一方面原因是ejb的方案太重了,另一方面開源架構使用起來非常友善和靈活,是以從03年以後這些開源架構得到了普通的使用。

下面我簡單描述一下這三個架構:

struts基于mvc結構的解決方案,分為struts1(已經淘汰了,用過struts1的程式員已經老了)和struts2兩個版本,和python一樣,這兩個版本不相容,目前struts2的最新版本是2.5.14.1,簡單的說struts就是建構了現成的mvc架構,程式員往這個架構裡加代碼就可以了,使用起來非常友善。

hibernate架構完成了面向對象與面向關系的映射,讓java程式以面向對象的方式操作面向關系的資料庫。整體結構基于dao進行擴充,很多操作隻需要配置一下就可以了,極其友善。

spring提供了javabean的容器,池化了javabean,提高了性能,而且核心代碼不到2m,小巧且強大。

關于這三個架構我在頭條将寫專門的文章介紹,今天就不再進行擴充了。

今天看到這個問題,有感而發,原來我們80後真的老了,80後的程式員,看到這篇文章,有沒有所感觸×××一起回憶,再一起繼續奮鬥!

http(超文本傳輸協定),它是一種主流b/s架構中應用的通信協定。具有以下特點:

1、無狀态

服務端不會記錄用戶端每次送出的請求,伺服器一旦相應用戶端之後,就會結束本次的通信過程。用戶端下一次的請求是一個新的 連接配接,和上一次通信沒有任何關系。

2、簡單靈活

http是基于請求(request)和響應(response)的模型

3、支援用戶端與服務端

支援主流的b/s架構的通信以及c/s架構的通信。

注意:c/s架構可選的協定有多種,例如:tcp/ip,udp,http

​ 而b/s架構通常隻支援http協定

伺服器通常由硬體和軟體部分構成,統一對使用者提供多種不同的服務。

1、硬體:包括響應的cpu、記憶體、磁盤等等

2、軟體:包括作業系統、運作環境、伺服器軟體、資料庫等等

web伺服器是提供服務端程式運作的一個環境,它本身也是一個軟體。

例如:将我們編寫html檔案放入到web伺服器中,那麼外界就可以通過浏覽器通路我們的html頁面

常見的web伺服器有apache,tomcat、jetty、nginx等等。

而tomcat、jetty這些web伺服器更準确的說是一個servlet容器。

項目根目錄,例如:myweb、ch01

通常存放靜态資源檔案(如:html等等)

web-inf

這個目錄是目前項目私有的一個檔案夾,隻能提供給項目内部通路,對于用戶端來說是通路不到了,通常這個目錄下存放的是java源代碼、編譯後的位元組碼檔案以及servlet的核心配置檔案web.xml

src

存放java源代碼的目錄

classes

存放編譯後的位元組碼檔案

lib

lib目錄存放目前項目所需要的jar檔案

jsp

用于存放jsp動态頁面

web.xml

項目的配置檔案,用于配置servlet的請求映射、過濾器、監聽器等等資訊。每一個web項目都對應一個web.xml配置檔案

meta-inf

配置應用程式、擴充程式、類加載服務等等

https://blog.csdn.net/shanhanyu/article/details/80515791

https://www.jianshu.com/p/d9b770a78da1

https://www.cnblogs.com/albertrui/p/8427661.html

https://blog.csdn.net/qq_41911570/article/details/83279327

繼續閱讀