上回小傅老師給大家講述Servlet的工作原理,不知同學(xué)們沒有結(jié)合案例進一步思考和操作鞭衩。
我們知道要讓一類運行起來一定要手工創(chuàng)建其實例苛白,一段時間內(nèi)沒有對其使用焰檩,JVM會將其當(dāng)內(nèi)存垃圾回收以釋放空間倾芝。Servlet的實例不需要程序員手功創(chuàng)建讨勤,是由容器負責(zé)創(chuàng)建與回收箭跳。
創(chuàng)建
第一次請求Servlet時,容器會加載Servlet類并生成一個實例潭千,緊接著對其初始化谱姓。HttpServlet中提供了一個init()方法供我們重寫,在此方法中可取得Servlet的配置參數(shù)或者申請外部的資源刨晴。第二次請求Servlet時屉来,容器不會再生成新實例,繼續(xù)使用以生成的實例割捅。
Servlet在其生命周期內(nèi)有且只有一個實例奶躯,這樣做的優(yōu)式可以大幅減小服務(wù)器側(cè)的內(nèi)存開銷帚桩,快速向客戶端做出響應(yīng)亿驾,以達到良好的客戶體驗。
初始化
HttpServlet抽象類提供了二個init()方法账嚎,一個帶ServletConfig的參數(shù)另一個不帶參數(shù)莫瞬。帶參數(shù)的方法是供容器內(nèi)部調(diào)用,如要重寫我們要使用不帶參數(shù)的init()郭蕉√垩可通過xml或注解的方式給Servlet配置初始化參數(shù),也可設(shè)定一些描述性的信息召锈。
以下代碼展示參數(shù)的設(shè)定與取得
執(zhí)行
初始化完成后旁振,容器調(diào)用service()方法,根據(jù)請求的類型轉(zhuǎn)發(fā)到相應(yīng)的doXXX()方法涨岁。Service()是較底層的執(zhí)行方法拐袜,一般不要重寫。doXXX()方法中的XXX是具體的請求類型梢薪,常用的有g(shù)et,post蹬铺。
銷毀
容器停止服務(wù)器時,會把所有的servlet實例銷毀秉撇。在銷毀前容器調(diào)用servlet的destory()方法,將之前申請的外部資源或新開的線程等都釋放。
小結(jié)
Servlet在第一次請求到來時由容器創(chuàng)建并調(diào)用init()對其初始化答恶,在其生命周期內(nèi)有且只有一個實例魔熏。請求經(jīng)service()方法分發(fā)到最終的doXXX()方法中得到處理,容器停止服務(wù)器時主動調(diào)用destroy()方法釋放相關(guān)的資源瘦麸。
“生命周期“知識點小傅老師講解完了谁撼,還沒有實際操作的同學(xué)快動手應(yīng)用一下吧。