天天看點

《深入剖析Tomcat》一2.1 javax.servlet.Servlet接口

servlet程式設計需要使用到javax.servlet和javax.servlet.http兩個包下的接口和類。在所有的類和接口中,javax.servlet.servlet接口是最為重要。所有的servlet程式都必須實作實作該接口或繼承自實作了該接口的類。

在servlet接口中聲明了5個方法,方法簽名如下:

《深入剖析Tomcat》一2.1 javax.servlet.Servlet接口

在servlet接口中聲明的5個方法裡,init()、service()和destroy()方法是與servlet的生命周期相關的方法。當執行個體化某個servlet類後,servlet容器會調用其init()方法進行初始化。servlet容器隻會調用該方法一次,調用後則可以執行服務方法了。在servlet接收任何請求之前,必須是經過正确初始化的。servlet程式員可以覆寫此方法,在其中編寫僅需要執行一次的初始化代碼,例如載入資料庫驅動程式、初始化預設值等。一般情況下,init()方法可以留白。

當servlet的一個用戶端請求到達後,servlet容器就調用相應的servlet的service()方法,并将javax.servlet.servletrequest對象和javax.servlet.servletresponse對象作為參數傳入。servletrequest對象包含用戶端的http請求的資訊,servletresponse對象則封裝servlet的響應資訊。在servlet對象的整個生命周期内,service()方法會被多次調用。

在将servlet執行個體從服務中移除前,servlet容器會調用servlet執行個體的destroy()方法。一般當servlet容器關閉或servlet容器要釋放記憶體時,才會将servlet執行個體移除,而且隻有當servlet執行個體的service()方法中的所有線程都退出或執行逾時後,才會調用destroy()方法。當servlet容器調用了某個servlet執行個體的destroy()方法後,它就不會再調用該servlet執行個體的service()方法了。調用destroy()方法讓servlet對象有機會去清理自身持有的資源,如記憶體、檔案句柄和線程等,確定所有的持久化狀态與記憶體中該servlet對象的目前狀态同步。

代碼清單2-1展示了名為primitiveservlet的servlet的代碼,該servlet非常簡單,可以用來測試本章中的servlet容器應用程式。primitiveservlet類實作了javax.servlet.servlet接口(所有的servlet都要實作該接口),提供了servlet接口中聲明的5個方法的實作。primitiveservlet類所做的事情非常簡單。每次調用init()、service()和destroy()方法時,servlet都會将方法名寫入标準控制台中。此外,service()方法會從servletresponse對象中擷取java.io.printwriter對象,并将字元串發送到用戶端浏覽器。

《深入剖析Tomcat》一2.1 javax.servlet.Servlet接口

繼續閱讀