JAVAWEB入门之Sevlet的执行原理
上一節(jié)我們學(xué)習(xí)了快速入門,
但是里面的問題是ServletDemo1里面既沒有創(chuàng)建對(duì)象,又沒有寫方法,竟然就被執(zhí)行了,為什么呢?
我們來分析一下Sevlet的執(zhí)行原理
1.當(dāng)服務(wù)器接收到客戶端瀏覽器的請(qǐng)求后,會(huì)解析請(qǐng)求URL路徑,獲取訪問的Servlet的資源路徑
2.查找web.xml文件,是否有對(duì)應(yīng)的<url-pattern>標(biāo)簽體內(nèi)容
3.如果有,則再找到對(duì)應(yīng)的<servlet-class>全類名
4.tomcat服務(wù)器,第一步將字節(jié)碼文件加載進(jìn)內(nèi)存,并且創(chuàng)建其對(duì)象
5.調(diào)用其方法
至于里面的<servlet-name>只是為了對(duì)應(yīng)名字可以互相匹配
?
Servlet中的生命周期:
1.被創(chuàng)建:執(zhí)行init方法,只執(zhí)行一次
疑問:默認(rèn)情況下,第一次被訪問時(shí),Servlet被創(chuàng)建
? ? ? ? ? ?可以配置執(zhí)行Servlet的創(chuàng)建時(shí)機(jī)
? ? ? ? ? ?在<servlet>標(biāo)簽下配置
? ? ? ? ? ??
修改為-5,這時(shí)候再次啟動(dòng)服務(wù)器,服務(wù)器并沒有init.....出現(xiàn),這說明
Servlet的init方法,只執(zhí)行一次,說明一個(gè)Servlet在內(nèi)存中只存在一個(gè)對(duì)象?,說明Servlet是單例的
多個(gè)用戶同時(shí)訪問時(shí),可能存在線程安全問題
解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對(duì)其修改值(賦值)
?
2.提供服務(wù):執(zhí)行service方法,執(zhí)行多次
每次訪問Servlet時(shí),Service方法都會(huì)被調(diào)用一次
3.被銷毀:執(zhí)行destroy方法,執(zhí)行一次
Servlet被銷毀時(shí)執(zhí)行。服務(wù)器關(guān)閉時(shí),Servlet被銷毀
只有服務(wù)器正常關(guān)閉時(shí),才會(huì)執(zhí)行destroy方法
那么問題來了,Servlet先銷毀還是destroy先執(zhí)行呢?
結(jié)論是,先執(zhí)行destroy方法,一般用于釋放資源
?
?
總結(jié)
以上是生活随笔為你收集整理的JAVAWEB入门之Sevlet的执行原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android studio的Activ
- 下一篇: spring揭秘_被问到了! Sprin