轉(zhuǎn)載自 微信公眾號(hào) 碼農(nóng)翻身 不用于商業(yè)宣傳 版權(quán)歸原作者所有 侵權(quán)刪
本文是給小白的Java EE生存指南的第4篇, 講一下幾乎100%Java 開(kāi)發(fā)人員都要用的 Tomcat僧著。
為什么有Tomcat 障簿? 其實(shí)需要從Servlet 說(shuō)起。
記得《給小白的Java EE生存指南(2)》 (回復(fù)“小白”查看) 提到的動(dòng)態(tài)網(wǎng)頁(yè)嗎皆怕? 常見(jiàn)的實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)就是CGI世蔗。
但是作為Java 的發(fā)明人, Sun肯定要搞一個(gè)超越CGI的技術(shù)出來(lái)顶滩, 之前Sun 通過(guò)Applet出了一個(gè)超級(jí)大風(fēng)頭寸爆, 讓整個(gè)世界一下子認(rèn)識(shí)了Java , 不過(guò)很快發(fā)現(xiàn)悲催的Applet其實(shí)用途不大仅醇, 眼看著互聯(lián)網(wǎng)開(kāi)始起勢(shì)魔种, 一定要搭上千載難逢的快車(chē)啊。
于是Servlet 就應(yīng)運(yùn)而生了叶摄, Servlet 其實(shí)就是Sun為了讓Java 能實(shí)現(xiàn)動(dòng)態(tài)的可交互的網(wǎng)頁(yè), 從而進(jìn)入Web編程的領(lǐng)域而定義的一套標(biāo)準(zhǔn)宵喂。
這套標(biāo)準(zhǔn)說(shuō)了:
你想用Java 開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)会傲,可以定義一個(gè)自己的"Servlet"(名字很怪,不知道怎么翻譯) , 但一定要是實(shí)現(xiàn)我的HttpServlet接口淌山, 然后重載doGet(), doPost()等方法。
用戶(hù)從瀏覽器GET的時(shí)候艾岂, 調(diào)用doGet()方法王浴, 從瀏覽器向服務(wù)器發(fā)送表單數(shù)據(jù)的時(shí)候, 調(diào)用doPost()方法氓辣。
(參見(jiàn) 《給小白的Java EE生存指南(1)》) 钞啸。
如果你想訪(fǎng)問(wèn)用戶(hù)從瀏覽器傳遞過(guò)來(lái)的參數(shù), 沒(méi)問(wèn)題体斩, 用HttpServletRequest 對(duì)象就好了絮吵, 里邊有g(shù)etParameter() ,getQueryString()方法蹬敲。
如果你處理完了伴嗡, 想向?yàn)g覽器返回?cái)?shù)據(jù), 用HttpServletResponse 調(diào)用getPrintWriter() 就可以輸出數(shù)據(jù)了澄暮。
如果你想實(shí)現(xiàn)一個(gè)購(gòu)物車(chē), 需要session, 很簡(jiǎn)單赏寇, 從HttpServletRequest 調(diào)用getSession() 就好了。
你寫(xiě)了一個(gè)"Servlet",接下來(lái)要運(yùn)行渠退, 你就發(fā)現(xiàn)沒(méi)法通過(guò)java 直接運(yùn)行了脐彩, 你需要一個(gè)能夠運(yùn)行Servlet的容器 , 這個(gè)容器Sun 最早實(shí)現(xiàn)了一個(gè)梅誓,叫Java Web Server, 1999年捐給了Apache Software foundation , 就改名叫Tomcat 佛南。
所以Tomcat 就是一個(gè)Servlet容器, 能接收用戶(hù)從瀏覽器發(fā)來(lái)的請(qǐng)求及穗, 然后轉(zhuǎn)發(fā)給Servlet處理绵载, 把處理完的響應(yīng)數(shù)據(jù)發(fā)回瀏覽器。
但是Servlet 輸出html ,還是采用了老的CGI 方式焚虱,是一句一句輸出懂版,所以,編寫(xiě)和修改 HTML 非常不方便谍咆。
于是 Java Server Pages(JSP) 就來(lái)救急了私股,JSP 并沒(méi)有增加任何本質(zhì)上不能用 Servlet 實(shí)現(xiàn)的功能倡鲸。
實(shí)際上JSP在運(yùn)行之前,需要先編譯成servlet , 然后才執(zhí)行的。
但是逼争,在 JSP 中編寫(xiě)靜態(tài)HTML 更加方便劝赔,不必再用 println語(yǔ) 句來(lái)輸出每一行 HTML 代碼着帽。更重要的是,借助內(nèi)容和外觀的分離仍翰,頁(yè)面制作中不同性質(zhì)的任務(wù)可以方便地分開(kāi):比如予借,由頁(yè)面設(shè)計(jì)者進(jìn)行 HTML設(shè)計(jì),同時(shí)留出供 Java 程序員插入動(dòng)態(tài)內(nèi)容的空間秦叛。
Tomcat 能運(yùn)行Servlet, 當(dāng)然運(yùn)行JSP肯定也是易如反掌龟再。
既然是Web 服務(wù)器, Tomcat除了能運(yùn)行Servlet和JSP之外浆劲, 也能像Apache/nginx 那樣哀澈,支持靜態(tài)html, 圖片,文檔的訪(fǎng)問(wèn)膨报, 只是性能要差一些适荣, 在實(shí)際的應(yīng)用中, 一般是這么使用他們的:
Nginx 作為負(fù)載均衡服務(wù)器 和靜態(tài)資源服務(wù)器放在最前端够吩, 后面是tomcat組成的集群丈氓。
如果用戶(hù)請(qǐng)求的是靜態(tài)資源, Nginx直接搞定湾笛, 不用麻煩后面的tomcat了嚎研。
如果是動(dòng)態(tài)資源(如xxx.jsp) , Nginix 就會(huì)按照一定的算法轉(zhuǎn)發(fā)到某個(gè)Tomcat上, 達(dá)到負(fù)載均衡的目的嘉赎。
“碼農(nóng)翻身” 公共號(hào) : 由工作15年的前IBM架構(gòu)師創(chuàng)建,分享編程和職場(chǎng)的經(jīng)驗(yàn)教訓(xùn)公条。
長(zhǎng)按二維碼, 關(guān)注碼農(nóng)翻身