走進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 -->

什麼是 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(網站),特點是一些列靜態內容的集合。看一個圖示:

走進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後的程序員,看到這篇文章,有沒有所感觸×××一起回憶,再一起繼續奮鬥!

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章