1. 程式人生 > >走進JavaWeb技術世界1:JavaWeb的由來和基礎知識

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

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視

https://github.com/h2pl/Java-Tutorial

喜歡的話麻煩點下Star哈

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

www.how2playlife.com

本文是微信公眾號【Java技術江湖】的《走進JavaWeb技術世界》其中一篇,本文部分內容來源於網路,為了把本文主題講得清晰透徹,也整合了很多我認為不錯的技術部落格內容,引用其中了一些比較好的部落格文章,如有侵權,請聯絡作者。

該系列博文會告訴你如何從入門到進階,從servlet到框架,從ssm再到SpringBoot,一步步地學習JavaWeb基礎知識,並上手進行實戰,接著瞭解JavaWeb專案中經常要使用的技術和元件,包括日誌元件、Maven、Junit,等等內容,以便讓你更完整地瞭解整個JavaWeb技術體系,形成自己的知識框架。為了更好地總結和檢驗你的學習成果,本系列文章也會提供每個知識點對應的面試題以及參考答案。

如果對本系列文章有什麼建議,或者是有什麼疑問的話,也可以關注公眾號【Java技術江湖】聯絡作者,歡迎你參與本系列博文的創作和修訂。

什麼是 Java Web

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

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

Web開發的歷史

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

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

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

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

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

CGI的推出,使得web開發正式進入了動態處理時代,伺服器能與客戶有真正意義上的交流了,有能儲存資料的資料庫了,雖然CGI的使用週期並不長,但是一定要紀念一下它,畢竟它是里程碑式的變革。java web技術正是踩著CGI的肩膀來到了廣大程式設計師的面前,java web解決了CGI的效能問題。CGI是以程序為單位管理請求的,而java web則是以執行緒為單位,處理能力更強,佔用的資源更少,這個核心的元件就是Servlet。看一組資源佔用圖,先看CGI的:

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

孰優孰劣一目瞭然,Servlet解決相同數量的請求,卻佔用較少的系統資源,這就是為什麼廣大程式設計師拋棄了CGI轉向java web的原因。

另外,開發一個Servlet並不複雜,看一個Servlet編寫的HelloWorld應用:

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

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

再看一下組合使用Servlet+javaBean+JSP的Model2開發結構:

這個結構是標準的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後的程式設計師,看到這篇文章,有沒有所感觸?關注我吧,我們一起回憶,再一起繼續奮鬥!

Java Web基礎知識

一、HTTP協議

HTTP(超文字傳輸協議),它是一種主流B/S架構中應用的通訊協議。具有以下特點:

1、無狀態

服務端不會記錄客戶端每次提交的請求,伺服器一旦相應客戶端之後,就會結束本次的通訊過程。客戶端下一次的請求是一個新的 連線,和上一次通訊沒有任何關係。

2、簡單靈活

HTTP是基於請求(request)和響應(response)的模型

3、支援客戶端與服務端

支援主流的B/S架構的通訊以及C/S架構的通訊。

注意:C/S架構可選的協議有多種,例如:TCP/IP,UDP,HTTP

​ 而B/S架構通常只支援HTTP協議

二、伺服器

1、概念

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

1、硬體:包括響應的CPU、記憶體、磁碟等等

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

2、web伺服器

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

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

常見的web伺服器有Apache,Tomcat、Jetty、Nginx等等。

而Tomcat、Jetty這些web伺服器更準確的說是一個Servlet容器。

三、JavaWeb專案結構

專案根目錄,例如: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

本文由部落格一文多發平臺 OpenWrite 釋出!