卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java web是什么原理?

網(wǎng)友解答: 如果你是70、80后的程序員,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90后,那你更要看看這篇文章,因?yàn)槟隳苷业絡(luò)ava web發(fā)展的歷史。言歸正傳,Java語(yǔ)言能長(zhǎng)

網(wǎng)友解答:

如果你是70、80后的程序員,你一定要看一看這篇文章,保證滿滿的回憶。如果你是90后,那你更要看看這篇文章,因?yàn)槟隳苷业絡(luò)ava web發(fā)展的歷史。

言歸正傳,Java語(yǔ)言能長(zhǎng)期霸占語(yǔ)言排行榜一個(gè)重要的原因就是強(qiáng)大的web開(kāi)發(fā)能力,web開(kāi)發(fā)是java的基石(在EJB推出的時(shí)候當(dāng)時(shí)的Sun用基石來(lái)描述EJB),所以了解java web開(kāi)發(fā)原理是非常重要的。如果僅僅跟大家聊java web開(kāi)發(fā)原理未免有點(diǎn)單薄,今天我將把java web開(kāi)發(fā)包含的主體內(nèi)容跟酷米的讀者一起分享一下(一直計(jì)劃寫(xiě)關(guān)于java web的文章,一直也沒(méi)時(shí)間寫(xiě),今天就當(dāng)時(shí)開(kāi)個(gè)頭吧)。

Web開(kāi)發(fā)的歷史

web開(kāi)發(fā)的歷史其實(shí)并不久遠(yuǎn),要搞清楚java web開(kāi)發(fā)的特點(diǎn)(主要是優(yōu)點(diǎn)),首先要了解web開(kāi)發(fā)的歷史(簡(jiǎn)單的回歸一下)。早期的web是非常簡(jiǎn)單的結(jié)構(gòu),用戶發(fā)出請(qǐng)求(request),服務(wù)器給出回應(yīng)(response),這個(gè)時(shí)期的web應(yīng)用,我們稱為web site(網(wǎng)站),特點(diǎn)是一些列靜態(tài)內(nèi)容的集合??匆粋€(gè)圖示:

圖中的服務(wù)器保持了一系列html腳本來(lái)響應(yīng)用戶的請(qǐng)求,可以說(shuō)這個(gè)時(shí)期的web應(yīng)用還是比較簡(jiǎn)單的,但是卻確立了兩個(gè)重要的對(duì)象:一個(gè)request(代表請(qǐng)求),另一個(gè)是response(代表回應(yīng))。如果把web開(kāi)發(fā)的歷史比喻成一部美國(guó)大片的話,那么request和response絕對(duì)是這部大片的那女主角,而且每一部都是不可或缺的主角(簡(jiǎn)單的說(shuō)就是死不了)。

看到這個(gè)圖,不知道第一批從事web開(kāi)發(fā)的80后是否和我一樣,已經(jīng)有點(diǎn)感觸了,當(dāng)年為了搞清楚這個(gè)結(jié)構(gòu),曾經(jīng)連續(xù)多少個(gè)通宵做實(shí)驗(yàn)(實(shí)驗(yàn)環(huán)境比較惡劣)。沒(méi)關(guān)系,這僅僅是個(gè)開(kāi)始,我想當(dāng)你看完這篇文章的時(shí)候,你會(huì)淚流滿面的(相信我)。為了配合一下這張結(jié)構(gòu)圖,我配一張圖片(當(dāng)年的我):

在web發(fā)展過(guò)程中,有一個(gè)小插曲,就是在web site向web application發(fā)展的過(guò)程中,出現(xiàn)了一個(gè)小“玩意兒”,就是applet,很多人了解java都是從使用java applet開(kāi)始的(70,80后那一批程序員)。當(dāng)時(shí)風(fēng)靡校園(我當(dāng)時(shí)在讀大一)的網(wǎng)易聊天室,哎呀那個(gè)火?。ù蠹一貞浺幌履阍趯W(xué)校機(jī)房上網(wǎng)時(shí)的興奮),這個(gè)聊天室就是采用了applet構(gòu)建的,當(dāng)時(shí)applet給靜態(tài)頁(yè)面一個(gè)動(dòng)態(tài)交互的可能,著實(shí)火了一段時(shí)間。現(xiàn)在知道applet的程序員,你已經(jīng)暴露年齡了??匆粡垐D片吧:

我想這個(gè)時(shí)候,淚點(diǎn)低的70、80后已經(jīng)有點(diǎn)濕潤(rùn)了吧。濕潤(rùn)的,自覺(jué)在這里停留一分鐘,對(duì)著屏幕來(lái)張合影,發(fā)個(gè)朋友圈。

過(guò)了這個(gè)插曲,真正的三層web開(kāi)發(fā)來(lái)了,一個(gè)里程碑式的web處理方式CGI,看一張圖:

CGI的推出,使得web開(kāi)發(fā)正式進(jìn)入了動(dòng)態(tài)處理時(shí)代,服務(wù)器能與客戶有真正意義上的交流了,有能存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)了,雖然CGI的使用周期并不長(zhǎng),但是一定要紀(jì)念一下它,畢竟它是里程碑式的變革。java web技術(shù)正是踩著CGI的肩膀來(lái)到了廣大程序員的面前,java web解決了CGI的性能問(wèn)題。CGI是以進(jìn)程為單位管理請(qǐng)求的,而java web則是以線程為單位,處理能力更強(qiáng),占用的資源更少,這個(gè)核心的組件就是Servlet。看一組資源占用圖,先看CGI的:

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

孰優(yōu)孰劣一目了然,Servlet解決相同數(shù)量的請(qǐng)求,卻占用較少的系統(tǒng)資源,這就是為什么廣大程序員拋棄了CGI轉(zhuǎn)向java web的原因。

另外,開(kāi)發(fā)一個(gè)Servlet并不復(fù)雜,看一個(gè)Servlet編寫(xiě)的HelloWorld應(yīng)用:

這個(gè)代碼結(jié)構(gòu)是不是很親切,是不是很有Coding的感覺(jué),其實(shí)Servlet就是個(gè)java 類而已,只不過(guò)增加了幾個(gè)限制而已,所以開(kāi)發(fā)一個(gè)Servlet并不復(fù)雜。然后就是把它部署到web服務(wù)器上(Tomcat這個(gè)老人家現(xiàn)在身體依然硬朗!),然后就等待客戶的請(qǐng)求就可以了。這是Servlet的三層部署圖:

java web開(kāi)發(fā)的技術(shù)體系還包括javabean和jsp,采用MVC結(jié)構(gòu)來(lái)組合這三個(gè)技術(shù)是java web開(kāi)發(fā)的基礎(chǔ)內(nèi)容,先看一下MVC的功能圖:

再看一下組合使用Servlet+javaBean+JSP的Model2開(kāi)發(fā)結(jié)構(gòu):

這個(gè)結(jié)構(gòu)是標(biāo)準(zhǔn)的Java web開(kāi)發(fā)結(jié)構(gòu),現(xiàn)在是不是很少能看到這么“干凈”的描述圖了?以上就是標(biāo)準(zhǔn)的java web 開(kāi)發(fā)的歷史描述,當(dāng)然這并不是說(shuō)這些內(nèi)容已經(jīng)過(guò)時(shí)了,反而它一直是官方的標(biāo)準(zhǔn)解決方案。只不過(guò)web發(fā)展迎來(lái)了另一個(gè)階段,繁榮的開(kāi)源架構(gòu)時(shí)代來(lái)了。。。

開(kāi)源框架時(shí)代

這個(gè)時(shí)代的典型代表就是Struts、Spring和Hibernate,簡(jiǎn)稱SSH。

嚴(yán)格的說(shuō),這部分內(nèi)容并不是官方解決方案,但是這些方案卻得到了廣大程序員的擁護(hù),一方面原因是EJB的方案太重了,另一方面開(kāi)源架構(gòu)使用起來(lái)非常方便和靈活,所以從03年以后這些開(kāi)源框架得到了普通的使用。

下面我簡(jiǎn)單描述一下這三個(gè)框架:

Struts基于MVC結(jié)構(gòu)的解決方案,分為struts1(已經(jīng)淘汰了,用過(guò)Struts1的程序員已經(jīng)老了)和struts2兩個(gè)版本,和Python一樣,這兩個(gè)版本不兼容,目前Struts2的最新版本是2.5.14.1,簡(jiǎn)單的說(shuō)Struts就是構(gòu)建了現(xiàn)成的MVC框架,程序員往這個(gè)框架里加代碼就可以了,使用起來(lái)非常方便。

Hibernate框架完成了面向?qū)ο笈c面向關(guān)系的映射,讓java程序以面向?qū)ο蟮姆绞讲僮髅嫦蜿P(guān)系的數(shù)據(jù)庫(kù)。整體結(jié)構(gòu)基于DAO進(jìn)行擴(kuò)展,很多操作只需要配置一下就可以了,極其方便。

Spring提供了javaBean的容器,池化了javabean,提高了性能,而且核心代碼不到2M,小巧且強(qiáng)大。

關(guān)于這三個(gè)框架我在酷米將寫(xiě)專門(mén)的文章介紹,今天就不再進(jìn)行擴(kuò)展了。

今天看到這個(gè)問(wèn)題,有感而發(fā),原來(lái)我們80后真的老了,80后的程序員,看到這篇文章,有沒(méi)有所感觸?關(guān)注我吧,我們一起回憶,再一起繼續(xù)奮斗!

網(wǎng)友解答:

java web的基礎(chǔ)api是servlet,通過(guò)servlet實(shí)現(xiàn)http請(qǐng)求的訪問(wèn)。更底層的實(shí)現(xiàn)就是servlet容器了。常用的容器有tomcat,jetty, weblogic等。

tomcat有兩大組件,connector和container,每個(gè)connector是一個(gè)http端口連接,接受http請(qǐng)求,封裝成httpservletrequest,然后調(diào)用container處理。由于有海量用戶訪問(wèn),因此connector有bio和nio兩種模式。bio模式每個(gè)connector綁定一個(gè)線程池,每個(gè)請(qǐng)求一個(gè)線程處理。nio模式使用java nio api,基于reator模式,實(shí)現(xiàn)io多路復(fù)用。

container是一種層次結(jié)構(gòu),從頂層到底層分為server,service,host,context,context是最基本的容器,我們通常開(kāi)發(fā)的java web程序就部署為一個(gè)context。java web servlet容器頂層接口servletcontext就代表一個(gè)context。

java web可能用mvc框架,如spring mvc,Struts2等。將所有的請(qǐng)求集中在一個(gè)前端控制器中,如spring mvc中的dispatcher servlet。對(duì)對(duì)于靜態(tài)頁(yè)面的訪問(wèn),tomcat提供了基本的servlet支持。每個(gè)servlet容器如tomcat, jetty等都提供了靜態(tài)訪問(wèn)的默認(rèn)servlet,當(dāng)web.xml中配置的servlet不匹配時(shí)由默認(rèn)servlet處理,返回靜態(tài)頁(yè)面。

標(biāo)簽: