Web學習日記_10:Servlet介面
在上面的文章中我們是通過實現Servlet介面來實現servlet中的方法的。
那我們就來了解Servlet介面吧。
1,Servlet的生命週期
- void init(ServletConfig);
- void service(ServletRequest,ServletResponse);
- void destroy();
a,Servlet的出生
伺服器會在Servlet第一次被訪問時建立Servlet,或者是在伺服器啟動時建立Servlet。如果伺服器啟動時就建立Servlet,那麼還需要在web.xml檔案中配置。也就是說預設情況下,Servlet是在第一次被訪問時由伺服器建立的。
而且一個Servlet型別,伺服器只建立一個例項物件,例如在我們首次訪問http://localhost:8080/專案名稱/helloworld(之前web.mxl自定義訪問路徑)時,伺服器通過“/helloworld”找到了繫結的Servlet名稱為cn.itcast.servlet.HelloServlet,然後伺服器檢視這個型別的Servlet是否已經建立過,如果沒有建立過,那麼伺服器才會通過反射來建立HelloServlet的例項。當我們再次訪問http://localhost:8080/helloservlet/helloworld時,伺服器就不會再次建立HelloServlet例項了,而是直接使用上次建立的例項。
在Servlet被建立後,伺服器會馬上呼叫Servlet的void init(ServletConfig)方法。請記住, Servlet出生後馬上就會呼叫init()方法,而且一個Servlet的一生。這個方法只會被呼叫一次。這好比小孩子出生後馬上就要去剪臍帶一樣,而且剪臍帶一生只有一次。
我們可以把一些對Servlet的初始化工作放到init方法中!
b,Servlet服務
當伺服器每次接收到請求時,都會去呼叫Servlet的service()方法來處理請求。伺服器接收到一次請求,就會呼叫service() 方法一次,所以service()方法是會被呼叫多次的。正因為如此,所以我們才需要把處理請求的程式碼寫到service()方法中!
c,Servlet的銷燬
Servlet是不會輕易被銷燬的,通常都是在伺服器關閉時Servlet才會被銷燬!在伺服器被關閉時,伺服器會去銷燬Servlet,在銷燬Servlet之前伺服器會先去呼叫Servlet的destroy()方法,我們可以把Servlet的臨終遺言放到destroy()方法中,例如對某些資源的釋放等程式碼放到destroy()方法中。
d,測試生命週期方法
修改HelloServlet如下,然後再去訪問http://localhost:8080/專案名稱/helloworld
public class HelloServlet implements Servlet { public void init(ServletConfig config) throws ServletException { System.out.println("Servlet被建立了!"); } public ServletConfig getServletConfig() {return null;} public void destroy() { System.out.println("Servlet要離去了!"); } public String getServletInfo() {return null;} public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("hello servlet!"); } }
在首次訪問HelloServlet時,init方法會被執行,而且也會執行service方法。再次訪問時,只會執行service方法,不再執行init方法。在關閉Tomcat時會呼叫destroy方法。