七個問題全面理解Servlet

來源:互聯網
上載者:User

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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.