眾所周知墨礁,Servlet的生命周期在容器里如下:
那我們主要從它的生命周期來(lái)分析源碼幢竹。一般來(lái)說(shuō),我們開發(fā)Sevlet恩静,只需繼承HttpServlet這個(gè)類即可焕毫,其類關(guān)系圖如下:
Servlet類為實(shí)現(xiàn)類提供了init(ServletConfig),service()和destroy()方法,并提供了獲取servlet配置信息的方法驶乾。
ServletConfig類為servlet的配置信息邑飒,相當(dāng)于配置在web.xml對(duì)應(yīng)servlet的配置信息。
GenericServlet為一個(gè)抽象類轻掩,實(shí)現(xiàn)了init(ServletConfig)方法幸乒,初始化了ServletConfig,并調(diào)用了init()方法唇牧,在此類中罕扎,這個(gè)方法為空實(shí)現(xiàn),可以在我們自定義的Servlet中重寫該方法丐重,同樣地腔召,destroy()方法也是如此。
在這個(gè)類中扮惦,service()方法并沒有實(shí)現(xiàn)臀蛛,而是繼承下來(lái)了,讓我們看下子類HttpServlet的service()方法崖蜜。
在這個(gè)方法里浊仆,第一步會(huì)調(diào)用HttpServletRequest中的getMethod獲取請(qǐng)求類型,根據(jù)各個(gè)類型進(jìn)行轉(zhuǎn)發(fā)調(diào)用該類的doXXX方法豫领,如果Servlet沒有重寫對(duì)應(yīng)的doXXX方法抡柿,會(huì)返回http.method_(post或者get)_not_supported這個(gè)錯(cuò)誤信息。
那么等恐,HttpServletRequest這個(gè)對(duì)象洲劣,容器是如何通過(guò)客戶端發(fā)送的請(qǐng)求進(jìn)行組裝备蚓,如何傳入到Servlet中,Servlet處理完成以后如何通過(guò)web.xml的配置打包成ServletResponse并返回的囱稽。這個(gè)便是我今后研究Tomcat源碼的方向郊尝,今天暫且看到這里。