1. Servlet的生命週期?
Servlet是一種可以 在Servlet容器中啟動並執行組件,那麼理所當然就應該有一個從建立到銷毀的過程,這個過程我們可以稱之為Servlet生命週期。Servlet的生命 周期可以分為載入、執行個體化、初始化、處理客戶請求和卸載五個階段,體現在方法上主要是init()、service()和destroy()三個方法。生 命周期的具體說明如下:
- Servlet容器完成載入Servlet類和執行個體化一個Servlet對象
- init()方法完成初始化工作,該方法由Servlet容器調用完成
- service()方法處理用戶端請求,並返迴響應結果
- destroy()方法在Servlet容器卸載Servlet之前被調用,釋放一些資源
2. Servlet的執行個體是在生命週期什麼時候建立的? 配置servlet最重要的是什嗎?
Servlet執行個體是在servlet第一次在容器中被載入的是時候建立的, Init()方法是用來配置這個servlet實力的, 這個方法在servlet的生命週期中只被調用一次,所以應該把所有servlet生命週期中的配置操作都寫在這個方法法裡面。
3. 為什麼不在Servlet中寫一個構造(Contructor)方法?
容器會自動為Servlet寫一個無參的構造方法
4. 我們沒有寫servlet的構造方法,那麼容器是怎麼建立servlet的執行個體呢?
容器會自動為Servlet寫一個無參的構造方法,容器是用Class.forName(className).newInstance()來建立servlet的執行個體的。
5. 當容器調用servlet的destory()方法的時候,servlet會馬上銷毀嗎? 如果當時這個servlet正在執行其他任務或者線程呢?
是的, 當容器調用servlet的destory()方法的時候,servlet會馬上銷毀,但是容器在調用destory()方法之前,會等servlet的service()方法結束剩餘的任務。
6. 用ServletRequest和ServletContext調用ReqestDispatcher有什麼區別?
在用ServletRequest調用RequestDispatcher的時候可以用相對URL, 但是ServletContext不行。
7. 為什麼在用ServletRequest.getRequestDispatcher()的時候可以用相對URL而用ServletContext.getRequestDispatch()的時候不可以?
因為ServletRequest包含當前的request path,可以用當前的request path去計算URL,但是ServletContext不包含當前的request path。