轉(zhuǎn)自:碼農(nóng)翻身(微信號(hào):coderising)
為茂名等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及茂名網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、茂名網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
我是Servlet, 由于很多框架把我深深地隱藏了起來(lái),我變得似乎無(wú)關(guān)緊要了,很多人也選擇性的把我給遺忘了。 其實(shí),我還活得好好的呢, 只不過(guò)是從前臺(tái)明星慢慢退居幕后而已。
想當(dāng)年我剛剛誕生的時(shí)候,無(wú)數(shù)人對(duì)我趨之若鶩。
因?yàn)槟莻€(gè)時(shí)候Web服務(wù)器只能處理靜態(tài)的HTML頁(yè)面,圖片,JavaScript這樣的東西, 比如Apache 這個(gè)著名的Web服務(wù)器。
人類(lèi)想要看一點(diǎn)動(dòng)態(tài)的內(nèi)容,比如什么留言板,購(gòu)物網(wǎng)站等,還得靠極為難用的CGI。
我一出生, 他們就歡呼著把CGI給拋棄,紛紛改用Java寫(xiě)Servlet程序, 再后來(lái)我的好兄弟JSP問(wèn)世,我們簡(jiǎn)直形成了絕配。
我負(fù)責(zé)控制,JSP負(fù)責(zé)視圖,再加上負(fù)責(zé)數(shù)據(jù)的Java Bean, MVC三駕馬車(chē)正式形成,風(fēng)靡一時(shí),想當(dāng)年,著名的開(kāi)源論壇軟件Jive就是我們的巔峰之作。
說(shuō)起JSP,這小子有時(shí)候還不太服我,經(jīng)常振振有詞地說(shuō):“你Servlet沒(méi)什么了不起的,我也可以當(dāng)Controller!”
JSP確實(shí)可以當(dāng)Controller, 早些年我還真的見(jiàn)過(guò),一個(gè)長(zhǎng)達(dá)6000多行的JSP,行使著Controller的職責(zé),每當(dāng)程序員要改這些代碼就膽顫心驚,叫苦不迭。
其實(shí)JSP不知道,它本質(zhì)上也就是Servlet ,JSP只不過(guò)穿了一件漂亮的外衣,給了程序員們一個(gè)輕松寫(xiě)動(dòng)態(tài)頁(yè)面的工具而已,實(shí)際運(yùn)行的時(shí)候會(huì)被編譯成Servlet類(lèi), 本質(zhì)上我們是一樣的。
我和JSP都生活在 Servlet Container當(dāng)中,Container這個(gè)詞有點(diǎn)高大上,但是說(shuō)白了,無(wú)非就是能執(zhí)行Servlet和JSP的一個(gè)東西,比如說(shuō) Tomcat, 比如說(shuō) Jetty。
但是無(wú)論是我還是JSP, 我們能處理的只是HTTP請(qǐng)求,必須得有人把HTTP請(qǐng)求轉(zhuǎn)發(fā)給我們才可以。
這件事情只有讓Tomcat, Jetty他們來(lái)做了,他們自己可以接收HTTP請(qǐng)求,然后轉(zhuǎn)發(fā)給我們;
他們也可以從別人,例如Apache那里接收HTTP請(qǐng)求,然后發(fā)給我們處理,處理完了再轉(zhuǎn)發(fā)給Apache, Apache再發(fā)給人類(lèi)的瀏覽器。
雖然有點(diǎn)麻煩,但是這種方式確實(shí)非常靈活,各司其職,擴(kuò)展性比較好,比如,一個(gè)Apache可以把請(qǐng)求分發(fā)給后臺(tái)多個(gè)Tomcat中的一個(gè)。
Apache,Nginx 他們專(zhuān)心致志地去處理靜態(tài)內(nèi)容(HTML, JS, 圖片) ,我們這里心無(wú)旁騖地執(zhí)地執(zhí)行“不講邏輯的”業(yè)務(wù)邏輯,訪問(wèn)數(shù)據(jù)庫(kù),然后生成頁(yè)面返回。
日子過(guò)得波瀾不驚,我一度認(rèn)為,這個(gè)世界就將這么運(yùn)行下去。
應(yīng)用程序越開(kāi)發(fā)越多,出現(xiàn)了一些通用的需求,比如安全,事務(wù),分布式等等,這些需求應(yīng)用程序不愿意處理,想丟給操作系統(tǒng),操作系統(tǒng)也不愿意處理, 那怎么辦?
不知道是誰(shuí)提了一個(gè)叫做中間件的概念: 你們不愿意做的,我們中間件來(lái)做。
Java 世界也不敢怠慢,也搞出了一大堆的規(guī)范,像什么EJB,JMS,JTA等等,把我和JSP也合并到其中,形成一個(gè)大“雜燴”,叫做J2EE。
其中最春風(fēng)得意的就是EJB這家伙,獨(dú)自生活在 EJB Container中(又是Container?。?,號(hào)稱(chēng)能支持真正地分布式計(jì)算:一個(gè)EJB可以有多個(gè)實(shí)例,分布到多個(gè)服務(wù)器中,應(yīng)對(duì)用戶(hù)的請(qǐng)求, 聽(tīng)起來(lái)很高深的技術(shù)。
他們把Servlet Container稱(chēng)為 Web Container, 和EJB Container 一起,還有其他的一些東西,被合并到一個(gè)叫做 Application Server當(dāng)中去了。 最知名的幾個(gè)Application Server 就是 Weblogic , WebSphere , JBoss。
國(guó)內(nèi)的金蝶也實(shí)現(xiàn)過(guò)一個(gè),叫做Apusic,雖然影響力不如前面那幾位,但值得贊賞。
我和JSP都沒(méi)有料到,EJB搶了我們的風(fēng)頭,成了系統(tǒng)的中心, 讓我們極為不爽。
我和JSP豈能善罷甘休? 我們決定抓住EJB的弱點(diǎn)進(jìn)行反擊, 我們和人類(lèi)一個(gè)叫做Rod Johnson的聯(lián)合,讓他出面,列舉出EJB的36大罪狀,昭告天下,這些罪狀包括但不限于:笨重,性能低下,難于測(cè)試,昂貴…
EJB確實(shí)是個(gè)扶不起的阿斗, 很快就被人批得體無(wú)完膚,大家紛紛投入Rod Johnson 創(chuàng)建的Spring的懷抱。
我松了一口氣, 可是很快就發(fā)現(xiàn)事情不對(duì)勁, 大家紛紛用起了框架! 比如Struts, SpringMVC…
在這些框架中,我雖然處于一個(gè)非常重要的角色, 但是通常情況下只要配置一下web.xml,就可以把我扔到一邊了。
Container 照例把HTTP請(qǐng)求傳遞給我,但是我卻不能親手處理,我需要傳遞給框架,框架分派給Controller,沒(méi)我什么事了!
那些程序員們要做的事情就是寫(xiě)Controller, Service , DAO這些和我八班桿子打不著的東西。
我恨框架, 但是看到程序員們寫(xiě)代碼寫(xiě)得那么高興,又無(wú)話可說(shuō),畢竟框架極大地減少了他們的工作量:
之前對(duì)于每個(gè)HTTP請(qǐng)求,程序員得手工地去解析URL, 調(diào)用相關(guān)的Java Bean。
現(xiàn)在只需要用個(gè)配置文件或者注解就可以把URL給映射到一個(gè)Java 類(lèi)。
之前對(duì)于HTTP請(qǐng)求中的參數(shù), 程序員也得手工解析和驗(yàn)證。
現(xiàn)在也可以直接映射到Java 對(duì)象或者變量
…
用起來(lái)這么簡(jiǎn)單,他們不用才怪。
更讓人生氣的是,Rod他們后來(lái)倒騰出來(lái)一個(gè)叫做 Spring Boot的東西,徹底地把我給隱藏起來(lái)了!
尤其是對(duì)于一個(gè)新手來(lái)說(shuō),甚至完全不知道我的存在。
Tomcat和Jetty這樣的Servlet Container也很悲催,他們竟然被內(nèi)嵌到了Spring Boot中! 程序員開(kāi)發(fā)出的Web應(yīng)用,就像一個(gè)普通的Java程序一樣,從main函數(shù)開(kāi)始運(yùn)行。
我們徹底地退居幕后了!
不過(guò)我有義務(wù)提醒一下學(xué)習(xí)后端編程的同學(xué),不要一上來(lái)就學(xué)習(xí)框架,不要被框架迷住你的雙眼!
還是應(yīng)該好好看看最基本的Java Web, 就是我和我的兄弟JSP。
skycto JEEditor:一鍵生成基于SSH框架的功能代碼
雖然是退居幕后,但是我的核心地位依然穩(wěn)固,是Java Web應(yīng)用的中堅(jiān)力量,我生活在Servlet Container中,專(zhuān)門(mén)處理HTTP請(qǐng)求,這么多年難逢敵手。
直到有一天,有個(gè)叫做Netty的家伙上門(mén)挑戰(zhàn)。
這個(gè)Netty居然完全不用Servlet Container,或者換句話說(shuō),人家自己就是一個(gè)“Container” , 這對(duì)我來(lái)說(shuō)絕對(duì)是釜底抽薪的攻擊, 我引以為傲的Servlet 規(guī)范, Servlet API統(tǒng)統(tǒng)不管用了。
我只能處理HTTP, 可是這個(gè)Netty支持各種各樣的協(xié)議:HTTP, FTP, UDP, 它還支持實(shí)現(xiàn)各種各樣自定義的協(xié)議! 這就意味著程序員完全可以自定義一套自己應(yīng)用的RPC協(xié)議,然后放到Netty上運(yùn)行。
它的底層是Java NIO,又封裝了Java NIO那些復(fù)雜的底層細(xì)節(jié),可以輕松實(shí)現(xiàn)高性能、高可靠的網(wǎng)絡(luò)服務(wù)器, 這實(shí)在是太可怕了。
我似乎看到了一個(gè)可怕的場(chǎng)景: 用Netty 開(kāi)發(fā)的服務(wù)器端,運(yùn)行著眾多的Web 服務(wù),他們之間使用私有的協(xié)議在互相調(diào)用,效率極高,性能極高, 根本沒(méi)有Servlet, HTTP, Tomcat什么事。
讓我稍感安慰的是,直接使用Netty的程序員們還不多,雖說(shuō)有不少人在使用基于Netty的Dubbo, 但是Netty也被封裝隱藏起來(lái)了。 我估計(jì)真正具有鉆研精神的程序員才愿意去研究他吧。
文章標(biāo)題:Servlet:我還活著呢!
地址分享:http://sd-ha.com/article4/jgipoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、微信小程序、定制開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、ChatGPT、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)