上期小傅老師講述了Servlets概念、作用、執(zhí)行過(guò)程虽抄,本期帶大家學(xué)習(xí)Servlet的工作原理。
我們知道Servlet是運(yùn)行在Servlet容器中的程序独柑,容器與Servlet好比魚(yú)與水的關(guān)系迈窟。容器可容納無(wú)數(shù)的Servlet,而Servlet讓容器變的更具訪問(wèn)性。默認(rèn)情況下容器啟動(dòng)時(shí)并不會(huì)將Servlet一起啟動(dòng)忌栅,只有客戶(hù)端第一次請(qǐng)求Servlet,容器才會(huì)創(chuàng)建實(shí)例并對(duì)其初始化车酣。相同類(lèi)型的Servlet在其生命周期有且只有一個(gè)實(shí)例,容器關(guān)閉時(shí)一并銷(xiāo)毀Servlet索绪。
我們先看下圖
從圖上可以看出容器實(shí)例化Servlet后就調(diào)用init()湖员,我們要加載外部的資源可以重寫(xiě)init()方法。通常Servlet的初始化參數(shù)的取得者春、文件的打開(kāi)等操作放在init()方法中實(shí)現(xiàn)破衔。
初始化完成后容器會(huì)調(diào)用service()方法,此方法好比路由器可將用戶(hù)請(qǐng)求路由到相應(yīng)的doXXX()方法钱烟。常用有g(shù)et晰筛、post請(qǐng)求嫡丙,在實(shí)際應(yīng)用中doGet()、doPost()是servlet程序中出現(xiàn)頻次最高的方法读第。
容器停止服務(wù)或卸載servlet時(shí)曙博,自動(dòng)調(diào)用destory()方法,以釋放init()方法中申請(qǐng)的外部資源怜瞒,或中止servlet運(yùn)行中產(chǎn)生的其它線程父泳。
下圖展示了容器與servle運(yùn)行的時(shí)序圖
對(duì)于Servlet的工作原理,實(shí)際過(guò)程是相當(dāng)繁瑣復(fù)雜的吴汪。但對(duì)于初學(xué)者只需簡(jiǎn)明扼要的了解下就好了惠窄,一段時(shí)間后回頭再學(xué)習(xí)一定要會(huì)收獲更多。