3.Servlet的生命周期

1.Servlet的生命周期
以前:以前的程序,java類,自己去new對象,自己去使用對象調(diào)用。
現(xiàn)在: sevlet程序。servlet的生命周期由tomcat服務(wù)器控制的。
servlet什么時候?qū)ο髣?chuàng)建,什么銷毀,什么時候調(diào)用什么方法???
4.2 Servlet的四個生命周期
    構(gòu)造方法: 在創(chuàng)建servlet對象時調(diào)用。只調(diào)用1次。證明servlet對象在tomcat服務(wù)器中是單實例的。
    init方法:在創(chuàng)建完servlet對象后調(diào)用。只調(diào)用1次。
    service方法: 在每次請求servlet時調(diào)用。調(diào)用n次。
    destroy方法: servlet對象銷毀時調(diào)用。只調(diào)用1次。tomcat服務(wù)器停止或web應(yīng)用重新部署時調(diào)用
4.3 用偽代碼模擬tomcat服務(wù)器如何調(diào)用servlet生命周期
瀏覽器輸入: http://localhost:8080/day10/hello
得到字符串: gz.itcast.a_servlet.HelloServlet
1)tomcat服務(wù)器通過反射構(gòu)造對象
    1.1 得到字節(jié)碼對象
        Class clazz = Class.forName("gz.itcast.a_servlet.HelloServlet ");
    1.2 構(gòu)造對象
        Object hello = clazz.newInstance();       --1) servlet的構(gòu)造方法被調(diào)用

2)tomcat服務(wù)器調(diào)用init方法
    2.1 得到init方法對象
        Method m = clazz.getDeclareMethod("init",ServeletConfig.class);
    2.2 執(zhí)行方法
        m.invoke(hello,config);                --2)servlet的init方法被調(diào)用

3)tomcat服務(wù)器創(chuàng)建request和response對象,調(diào)用service方法
        3.1 得到service方法對象
        Method m = clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletRespnose.class);
        3.2 執(zhí)行方法
                        m.invoke(hello,request,response);       --3)servlet的service方法被調(diào)
4)tomcat服務(wù)器停止或web應(yīng)用重新部署時,tomcat服務(wù)器調(diào)用destroy方法
        4.1 得到destroy方法對象
        Method m = clazz.getDeclareMethod("destroy",null)
        4.2 執(zhí)行方法
        m.invoke(hello,null);                   --4)servlet的destroy方法被調(diào)用
2.LiftServlet的代碼
/**
    測試Servlet的生命周期:
         1.構(gòu)造方法 (只是調(diào)用一次)
         2.init初始化方法(只是調(diào)用了一次)
         3.service方法 (多次調(diào)動)
         4.destroy方法 (調(diào)用一次,服務(wù)器重新部署的時候,或者是服務(wù)器關(guān)閉重新啟動的時候)
    這些方法都是通過反射機制去調(diào)用的
 */
public class LiftServlet extends HttpServlet {
    public  LiftServlet(){
        System.out.println("servlet的構(gòu)造方法");
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法被調(diào)用了");
    }
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("service方法被調(diào)用了");
    }
    @Override
    public void destroy() {
        System.out.println("destroy方法被調(diào)用了");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容