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ù)。