关于Servlet的原理以及常用类
Servlet是JavaWeb的三大組件之一,它屬于動態(tài)資源。
在Servlet中通常需要:
接收請求數(shù)據(jù);
處理請求;
完成響應(yīng)。
實現(xiàn)Servlet有三種方式:
實現(xiàn)javax.servlet.Servlet接口;
繼承javax.servlet.GenericServlet類;
繼承javax.servlet.http.HttpServlet類;
?
與Servlet的生命周期相關(guān)的方法有:
void init(ServletConfig);
void service(ServletRequest,ServletResponse);
void destroy();
服務(wù)器會在Servlet第一次被訪問時創(chuàng)建Servlet,或者是在服務(wù)器啟動時創(chuàng)建Servlet。如果服務(wù)器啟動時就創(chuàng)建Servlet,那么還需要在web.xml文件中配置(<load-on-startup>0</load-on-startup>)。也就是說默認情況下,Servlet是在第一次被訪問時由服務(wù)器創(chuàng)建的。
?
而且一個Servlet類型,服務(wù)器只創(chuàng)建一個實例對象.
在Servlet被創(chuàng)建后,服務(wù)器會馬上調(diào)用Servlet的void init(ServletConfig)方法。請記住, Servlet出生后馬上就會調(diào)用init()方法,而且一個Servlet的一生。
當服務(wù)器每次接收到請求時,都會去調(diào)用Servlet的service()方法來處理請求。服務(wù)器接收到一次請求,就會調(diào)用service() 方法一次,所以service()方法是會被調(diào)用多次的。
?
Servlet是不會輕易離去的,通常都是在服務(wù)器關(guān)閉時Servlet才會離去!在服務(wù)器被關(guān)閉時,服務(wù)器會去銷毀Servlet,在銷毀Servlet之前服務(wù)器會先去調(diào)用Servlet的destroy()方法
?
Servlet與線程安全
因為一個類型的Servlet只有一個實例對象,那么就有可能會現(xiàn)時出一個Servlet同時處理多個請求,那么Servlet是否為線程安全的呢?答案是:“不是線程安全的”。這說明Servlet的工作效率很高,但也存在線程安全問題!
所以我們不應(yīng)該在Servlet中便宜創(chuàng)建成員變量,因為可能會存在一個線程對這個成員變量進行寫操作,另一個線程對這個成員變量進行讀操作。
?
GenericServlet概述
GenericServlet是Servlet接口的實現(xiàn)類,我們可以通過繼承GenericServlet來編寫自己的Servlet。
?
HttpServlet類是GenericServlet的子類,它提供了對HTTP請求的特殊支持,所以通常我們都會通過繼承HttpServlet來完成自定義的Servlet。
?
HttpServlet類中提供了service(HttpServletRequest,HttpServletResponse)方法,這個方法是HttpServlet自己的方法,不是從Servlet繼承來的。
在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法會去判斷當前請求是GET還是POST,如果是GET請求,那么會去調(diào)用本類的doGet()方法,如果是POST請求會去調(diào)用doPost()方法,這說明我們在子類中去覆蓋doGet()或doPost()方法即可。
?
ServletContext
服務(wù)器會為每個應(yīng)用創(chuàng)建一個ServletContext對象:
l? ServletContext對象的創(chuàng)建是在服務(wù)器啟動時完成的;
l? ServletContext對象的銷毀是在服務(wù)器關(guān)閉時完成的。
?ServletContext對象的作用是在整個Web應(yīng)用的動態(tài)資源之間共享數(shù)據(jù)!
?
?
JSP---->Servlet---->編譯.class文件 執(zhí)行.
?
擴展: 關(guān)于Session的創(chuàng)建和銷毀
Session:session將數(shù)據(jù)保存在服務(wù)器端.通過cookie回寫了一個JSESSIONID.
* session的創(chuàng)建和銷毀:
創(chuàng)建的時候:
服務(wù)器端第一次調(diào)用getSession()方法的時候創(chuàng)建的.
* 銷毀:
* 第一種:非正常關(guān)閉服務(wù)器.(正常關(guān)閉session不會銷毀---序列化.tomcat/work路徑下.)
* 第二種:默認30分鐘.tomcat/conf/web.xml中.
* 第三種:手動調(diào)用了session.invalidate();
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/DreamDrive/p/4090989.html
總結(jié)
以上是生活随笔為你收集整理的关于Servlet的原理以及常用类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 11g 建表 表名大小写问
- 下一篇: 正则表达式常用匹配