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

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到個人倉庫裏查看html

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

喜歡的話麻煩點下Star哈java

文章首發於個人我的博客:python

www.how2playlife.comgit

本文是微信公衆號【Java技術江湖】的《走進JavaWeb技術世界》其中一篇,本文部份內容來源於網絡,爲了把本文主題講得清晰透徹,也整合了不少我認爲不錯的技術博客內容,引用其中了一些比較好的博客文章,若有侵權,請聯繫做者。程序員

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

若是對本系列文章有什麼建議,或者是有什麼疑問的話,也能夠關注公衆號【Java技術江湖】聯繫做者,歡迎你參與本系列博文的創做和修訂。web

什麼是 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基礎知識

1、HTTP協議

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

一、無狀態

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

二、簡單靈活

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

三、支持客戶端與服務端

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

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

​ 而B/S架構一般只支持HTTP協議

2、服務器

一、概念

服務器一般由硬件和軟件部分構成,統一對用戶提供多種不一樣的服務。

一、硬件:包括響應的CPU、內存、磁盤等等

二、軟件:包括操做系統、運行環境、服務器軟件、數據庫等等

二、web服務器

web服務器是提供服務端程序運行的一個環境,它自己也是一個軟件。

例如:將咱們編寫HTML文件放入到web服務器中,那麼外界就能夠經過瀏覽器訪問咱們的html頁面

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

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

3、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   配置應用程序、擴展程序、類加載服務等等

參考文章

http://www.javashuo.com/article/p-zyljtuoi-e.html
https://www.jianshu.com/p/d9b770a78da1
http://www.javashuo.com/article/p-tlxshlkd-p.html
https://blog.csdn.net/qq_41911570/article/details/83279327

本文由博客一文多發平臺 OpenWrite 發佈!

參考文章

http://www.javashuo.com/article/p-zyljtuoi-e.html
https://www.jianshu.com/p/d9b770a78da1
http://www.javashuo.com/article/p-tlxshlkd-p.html
https://blog.csdn.net/qq_41911570/article/details/83279327

微信公衆號

我的公衆號:程序員黃小斜


黃小斜是 985 碩士,阿里巴巴Java工程師,在自學編程、技術求職、Java學習等方面有豐富經驗和獨到看法,但願幫助到更多想要從事互聯網行業的程序員們。

做者專一於 JAVA 後端技術棧,熱衷於分享程序員乾貨、學習經驗、求職心得,以及自學編程和Java技術棧的相關乾貨。

黃小斜是一個斜槓青年,堅持學習和寫做,相信終身學習的力量,但願和更多的程序員交朋友,一塊兒進步和成長!

原創電子書:
關注微信公衆號【程序員黃小斜】後回覆【原創電子書】便可領取我原創的電子書《菜鳥程序員修煉手冊:從技術小白到阿里巴巴Java工程師》這份電子書總結了我2年的Java學習之路,包括學習方法、技術總結、求職經驗和麪試技巧等內容,已經幫助不少的程序員拿到了心儀的offer!

程序員3T技術學習資源: 一些程序員學習技術的資源大禮包,關注公衆號後,後臺回覆關鍵字 「資料」 便可免費無套路獲取,包括Java、python、C++、大數據、機器學習、前端、移動端等方向的技術資料。

技術公衆號:Java技術江湖

若是你們想要實時關注我更新的文章以及分享的乾貨的話,能夠關注個人微信公衆號【Java技術江湖】

這是一位阿里 Java 工程師的技術小站。做者黃小斜,專一 Java 相關技術:SSM、SpringBoot、MySQL、分佈式、中間件、集羣、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!

Java工程師必備學習資源:
關注公衆號後回覆」Java「便可領取 Java基礎、進階、項目和架構師等免費學習資料,更有數據庫、分佈式、微服務等熱門技術學習視頻,內容豐富,兼顧原理和實踐,另外也將贈送做者原創的Java學習指南、Java程序員面試指南等乾貨資源

個人公衆號

相關文章
相關標籤/搜索