您好,登錄后才能下訂單哦!
本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內(nèi)容請到我的倉庫里查看
https://github.com/h3pl/Java-Tutorial
喜歡的話麻煩點下Star哈
文章首發(fā)于我的個人博客:
www.how2playlife.com
本×××術(shù)江湖】的《走進JavaWeb技術(shù)世界》其中一篇,本文部分內(nèi)容來源于網(wǎng)絡(luò),為了把本文主題講得清晰透徹,也整合了很多我認為不錯的技術(shù)博客內(nèi)容,引用其中了一些比較好的博客文章,如有侵權(quán),請聯(lián)系作者。
該系列博文會告訴你如何從入門到進階,從servlet到框架,從ssm再到SpringBoot,一步步地學習JavaWeb基礎(chǔ)知識,并上手進行實戰(zhàn),接著了解JavaWeb項目中經(jīng)常要使用的技術(shù)和組件,包括日志組件、Maven、Junit,等等內(nèi)容,以便讓你更完整地了解整個JavaWeb技術(shù)體系,形成自己的知識框架。為了更好地總結(jié)和檢驗?zāi)愕膶W習成果,本系列文章也會提供每個知識點對應(yīng)的面試題以及參考答案。
如果對本系列文章有什么建議,或者是有什么疑問的話,也×××術(shù)江湖】聯(lián)系作者,歡迎你參與本系列博文的創(chuàng)作和修訂。
<!-- more -->
如果你是70、80后的程序員,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90后,那你更要看看這篇文章,因為你能找到j(luò)ava web發(fā)展的歷史。
言歸正傳,Java語言能長期霸占語言排行榜一個重要的原因就是強大的web開發(fā)能力,web開發(fā)是java的基石(在EJB推出的時候當時的Sun用基石來描述EJB),所以了解java web開發(fā)原理是非常重要的。如果僅僅跟大家聊java web開發(fā)原理未免有點單薄,今天我將把java web開發(fā)包含的主體內(nèi)容跟頭條的讀者一起分享一下(一直計劃寫關(guān)于java web的文章,一直也沒時間寫,今天就當時開個頭吧)。
web開發(fā)的歷史其實并不久遠,要搞清楚java web開發(fā)的特點(主要是優(yōu)點),首先要了解web開發(fā)的歷史(簡單的回歸一下)。早期的web是非常簡單的結(jié)構(gòu),用戶發(fā)出請求(request),服務(wù)器給出回應(yīng)(response),這個時期的web應(yīng)用,我們稱為web site(網(wǎng)站),特點是一些列靜態(tài)內(nèi)容的集合??匆粋€圖示:
圖中的服務(wù)器保持了一系列html腳本來響應(yīng)用戶的請求,可以說這個時期的web應(yīng)用還是比較簡單的,但是卻確立了兩個重要的對象:一個request(代表請求),另一個是response(代表回應(yīng))。如果把web開發(fā)的歷史比喻成一部美國大片的話,那么request和response絕對是這部大片的那女主角,而且每一部都是不可或缺的主角(簡單的說就是死不了)。
看到這個圖,不知道第一批從事web開發(fā)的80后是否和我一樣,已經(jīng)有點感觸了,當年為了搞清楚這個結(jié)構(gòu),曾經(jīng)連續(xù)多少個通宵做實驗(實驗環(huán)境比較惡劣)。沒關(guān)系,這僅僅是個開始,我想當你看完這篇文章的時候,你會淚流滿面的(相信我)。為了配合一下這張結(jié)構(gòu)圖,在web發(fā)展過程中,有一個小插曲,就是在web site向web application發(fā)展的過程中,出現(xiàn)了一個小“玩意兒”,就是applet,很多人了解java都是從使用java applet開始的(70,80后那一批程序員)。當時風靡校園(我當時在讀大一)的網(wǎng)易聊天室,哎呀那個火啊(大家回憶一下你在學校機房上網(wǎng)時的興奮),這個聊天室就是采用了applet構(gòu)建的,當時applet給靜態(tài)頁面一個動態(tài)交互的可能,著實火了一段時間?,F(xiàn)在知道applet的程序員,你已經(jīng)暴露年齡了。看一張圖片吧:
我想這個時候,淚點低的70、80后已經(jīng)有點濕潤了吧。濕潤的,自覺在這里停留一分鐘,對著屏幕來張合影,發(fā)個朋友圈。
過了這個插曲,真正的三層web開發(fā)來了,一個里程碑式的web處理方式CGI,看一張圖:
CGI的推出,使得web開發(fā)正式進入了動態(tài)處理時代,服務(wù)器能與客戶有真正意義上的交流了,有能存儲數(shù)據(jù)的數(shù)據(jù)庫了,雖然CGI的使用周期并不長,但是一定要紀念一下它,畢竟它是里程碑式的變革。java web技術(shù)正是踩著CGI的肩膀來到了廣大程序員的面前,java web解決了CGI的性能問題。CGI是以進程為單位管理請求的,而java web則是以線程為單位,處理能力更強,占用的資源更少,這個核心的組件就是Servlet??匆唤M資源占用圖,先看CGI的:
再看一下java web中的servlet資源圖:
孰優(yōu)孰劣一目了然,Servlet解決相同數(shù)量的請求,卻占用較少的系統(tǒng)資源,這就是為什么廣大程序員拋棄了CGI轉(zhuǎn)向java web的原因。
另外,開發(fā)一個Servlet并不復(fù)雜,看一個Servlet編寫的HelloWorld應(yīng)用:
這個代碼結(jié)構(gòu)是不是很親切,是不是很有Coding的感覺,其實Servlet就是個java 類而已,只不過增加了幾個限制而已,所以開發(fā)一個Servlet并不復(fù)雜。然后就是把它部署到web服務(wù)器上(Tomcat這個老人家現(xiàn)在身體依然硬朗?。?,然后就等待客戶的請求就可以了。這是Servlet的三層部署圖:
java web開發(fā)的技術(shù)體系還包括javabean和jsp,采用MVC結(jié)構(gòu)來組合這三個技術(shù)是java web開發(fā)的基礎(chǔ)內(nèi)容,先看一下MVC的功能圖:
再看一下組合使用Servlet+javaBean+JSP的Model2開發(fā)結(jié)構(gòu):
這個結(jié)構(gòu)是標準的Java web開發(fā)結(jié)構(gòu),現(xiàn)在是不是很少能看到這么“干凈”的描述圖了?以上就是標準的java web 開發(fā)的歷史描述,當然這并不是說這些內(nèi)容已經(jīng)過時了,反而它一直是官方的標準解決方案。只不過web發(fā)展迎來了另一個階段,繁榮的開源架構(gòu)時代來了。。。
這個時代的典型代表就是Struts、Spring和Hibernate,簡稱SSH。
嚴格的說,這部分內(nèi)容并不是官方解決方案,但是這些方案卻得到了廣大程序員的擁護,一方面原因是EJB的方案太重了,另一方面開源架構(gòu)使用起來非常方便和靈活,所以從03年以后這些開源框架得到了普通的使用。
下面我簡單描述一下這三個框架:
Struts基于MVC結(jié)構(gòu)的解決方案,分為struts1(已經(jīng)淘汰了,用過Struts1的程序員已經(jīng)老了)和struts2兩個版本,和Python一樣,這兩個版本不兼容,目前Struts2的最新版本是2.5.14.1,簡單的說Struts就是構(gòu)建了現(xiàn)成的MVC框架,程序員往這個框架里加代碼就可以了,使用起來非常方便。
Hibernate框架完成了面向?qū)ο笈c面向關(guān)系的映射,讓java程序以面向?qū)ο蟮姆绞讲僮髅嫦蜿P(guān)系的數(shù)據(jù)庫。整體結(jié)構(gòu)基于DAO進行擴展,很多操作只需要配置一下就可以了,極其方便。
Spring提供了javaBean的容器,池化了javabean,提高了性能,而且核心代碼不到2M,小巧且強大。
關(guān)于這三個框架我在頭條將寫專門的文章介紹,今天就不再進行擴展了。
今天看到這個問題,有感而發(fā),原來我們80后真的老了,80后的程序員,看到這篇文章,有沒有所感觸×××一起回憶,再一起繼續(xù)奮斗!
HTTP(超文本傳輸協(xié)議),它是一種主流B/S架構(gòu)中應(yīng)用的通信協(xié)議。具有以下特點:
1、無狀態(tài)
服務(wù)端不會記錄客戶端每次提交的請求,服務(wù)器一旦相應(yīng)客戶端之后,就會結(jié)束本次的通信過程??蛻舳讼乱淮蔚恼埱笫且粋€新的 連接,和上一次通信沒有任何關(guān)系。
2、簡單靈活
HTTP是基于請求(request)和響應(yīng)(response)的模型
3、支持客戶端與服務(wù)端
支持主流的B/S架構(gòu)的通信以及C/S架構(gòu)的通信。
注意:C/S架構(gòu)可選的協(xié)議有多種,例如:TCP/IP,UDP,HTTP
? 而B/S架構(gòu)通常只支持HTTP協(xié)議
服務(wù)器通常由硬件和軟件部分構(gòu)成,統(tǒng)一對用戶提供多種不同的服務(wù)。
1、硬件:包括響應(yīng)的CPU、內(nèi)存、磁盤等等
2、軟件:包括操作系統(tǒng)、運行環(huán)境、服務(wù)器軟件、數(shù)據(jù)庫等等
web服務(wù)器是提供服務(wù)端程序運行的一個環(huán)境,它本身也是一個軟件。
例如:將我們編寫HTML文件放入到web服務(wù)器中,那么外界就可以通過瀏覽器訪問我們的html頁面
常見的web服務(wù)器有Apache,Tomcat、Jetty、Nginx等等。
而Tomcat、Jetty這些web服務(wù)器更準確的說是一個Servlet容器。
項目根目錄,例如:myweb、ch01 | ? | ? | 通常存放靜態(tài)資源文件(如:html等等) |
---|---|---|---|
? | WEB-INF | ? | 這個目錄是當前項目私有的一個文件夾,只能提供給項目內(nèi)部訪問,對于客戶端來說是訪問不到了,通常這個目錄下存放的是Java源代碼、編譯后的字節(jié)碼文件以及Servlet的核心配置文件web.xml |
? | ? | src | 存放java源代碼的目錄 |
? | ? | classes | 存放編譯后的字節(jié)碼文件 |
? | ? | lib | lib目錄存放當前項目所需要的jar文件 |
? | ? | JSP | 用于存放JSP動態(tài)頁面 |
? | ? | web.xml | 項目的配置文件,用于配置Servlet的請求映射、過濾器、監(jiān)聽器等等信息。每一個web項目都對應(yīng)一個web.xml配置文件 |
? | META-INF | ? | 配置應(yīng)用程序、擴展程序、類加載服務(wù)等等 |
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
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。