web開(kāi)發(fā)中 web 容器的作用(如tomcat)

我們講到servlet可以理解服務(wù)器端處理數(shù)據(jù)的java小程序,那么誰(shuí)來(lái)負(fù)責(zé)管理servlet呢?這時(shí)候我們就要用到web容器。它幫助我們管理著servlet等,使我們只需要將重心專(zhuān)注于業(yè)務(wù)邏輯。

什么是web容器?

servlet沒(méi)有main方法,那我們?nèi)绾螁?dòng)一個(gè)servlet,如何結(jié)束一個(gè)servlet,如何尋找一個(gè)servlet等等,都受控于另一個(gè)java應(yīng)用,這個(gè)應(yīng)用我們就稱(chēng)之為web容器。

我們最常見(jiàn)的tomcat就是這樣一個(gè)容器。如果web服務(wù)器應(yīng)用得到一個(gè)指向某個(gè)servlet的請(qǐng)求,此時(shí)服務(wù)器不是把servlet交給servlet本身,而是交給部署該servlet的容器。要有容器向servlet提供http請(qǐng)求和響應(yīng),而且要由容器調(diào)用servlet的方法,如doPost或者doGet。

web容器的作用

servlet需要由web容器來(lái)管理,那么采取這種機(jī)制有什么好處呢?

  • 通信支持
    利用容器提供的方法,你可以簡(jiǎn)單的實(shí)現(xiàn)servlet與web服務(wù)器的對(duì)話(huà)。否則你就要自己建立server搜創(chuàng)可貼,監(jiān)聽(tīng)端口,創(chuàng)建新的流等等一系列復(fù)雜的操作。而容器的存在就幫我們封裝這一系列復(fù)雜的操作。使我們能夠?qū)W⒂趕ervlet中的業(yè)務(wù)邏輯的實(shí)現(xiàn)。

  • 生命周期管理
    容器負(fù)責(zé)servlet的整個(gè)生命周期。如何加載類(lèi),實(shí)例化和初始化servlet,調(diào)用servlet方法,并使servlet實(shí)例能夠被垃圾回收。有了容器,我們就不用花精力去考慮這些資源管理垃圾回收之類(lèi)的事情。

  • 多線(xiàn)程支持
    容器會(huì)自動(dòng)為接收的每個(gè)servlet請(qǐng)求創(chuàng)建一個(gè)新的java線(xiàn)程,servlet運(yùn)行完之后,容器會(huì)自動(dòng)結(jié)束這個(gè)線(xiàn)程。

  • 聲明式實(shí)現(xiàn)安全
    利用容器,可以使用xml部署描述文件來(lái)配置安全性,而不必將其硬編碼到servlet中。

  • jsp支持
    容器將jsp翻譯成java!

容器如何處理請(qǐng)求

How the Container handles a request01.PNG

client點(diǎn)擊一個(gè)URL,其URL指向一個(gè)servlet而不是靜態(tài)界面。

How the Container handles a request02.PNG

容器識(shí)別出這個(gè)請(qǐng)求索要的是一個(gè)servlet,所以創(chuàng)建兩個(gè)對(duì)象:

  • httpservletrequest
  • httpservletresponse
03.PNG

容器根據(jù)請(qǐng)求中的URL找到對(duì)應(yīng)的servlet,為這個(gè)請(qǐng)求創(chuàng)建或分配一個(gè)線(xiàn)程,并把兩個(gè)對(duì)象request和response傳遞到servlet線(xiàn)程中。

Paste_Image.png

容器調(diào)用servlet的service()方法。根據(jù)請(qǐng)求的不同類(lèi)型,service()方法會(huì)調(diào)用doGet()或者doPost()方法。

Paste_Image.png

doGet()方法生成動(dòng)態(tài)頁(yè)面,然后把這個(gè)頁(yè)面填入到response對(duì)象中,此時(shí),容器仍然擁有response對(duì)象的引用。

Paste_Image.png

線(xiàn)程結(jié)束。容器把response對(duì)象轉(zhuǎn)換成http響應(yīng),傳回client,并銷(xiāo)毀response和request對(duì)象。

URL與servlet映射模式

<servlet>
    <servlet-name>Ch1Servlet</servlet-name>
    <servlet-class>ch1Servlet.Ch1Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Ch1Servlet</servlet-name>
    <url-pattern>/Ch1Servlet</url-pattern>
  </servlet-mapping>

servlet有三個(gè)名字:

  • 客戶(hù)知道的URL名 <url-pattern>/Ch1Servlet</url-pattern>
  • 部署人員知道的秘密的內(nèi)部名 <servlet-name>Ch1Servlet</servlet-name>
  • 實(shí)際文件名 <servlet-class>ch1Servlet.Ch1Servlet</servlet-class>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0 系列目錄# WEB請(qǐng)求處理 WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理 WEB請(qǐng)求處理二:Nginx請(qǐng)求反向代理 本...
    七寸知架構(gòu)閱讀 14,237評(píng)論 22 189
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,637評(píng)論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,787評(píng)論 11 349
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,501評(píng)論 0 10
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139

友情鏈接更多精彩內(nèi)容