servlet入門:servlet介紹及生命週期

內容提要:什麼是servlet?
Servlet 是實現特殊接口的 java 類,是運行在服務器端的Java應用程序,具有獨立於平臺和協議的特性。
servlet的工作模式
  客戶端發送請求至服務器 
  服務器啓動並調用Servlet,Servlet根據客戶端請求生成響應內容並將其傳給服務器 

什麼是servlet?

Servlet 是實現特殊接口的 java 類,是運行在服務器端的Java應用程序,具有獨立於平臺和協議的特性。

servlet的工作模式

  客戶端發送請求至服務器

  服務器啓動並調用Servlet,Servlet根據客戶端請求生成響應內容並將其傳給服務器

  服務器將響應返回客戶端

servlet的工作模式

可見servlet擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。

servlet生命週期:

servlet的生命週期由部署servlet的容器來控制,當一個請求映射到一個servlet時,該容器執行下列步驟。

(1) init() 方法

 它是在服務器裝入 Servlet 時執行的。   在 Servlet 的生命期中,僅執行一次 init() 方法。無論有多少客戶機訪問 Servlet,都不會重複執行 init() 。

  可以覆蓋init() 方法,典型應用:初始化數據庫連接。

    缺省的 init() 方法設置了 Servlet 的初始化參數,並用它的 ServletConfig 對象參數來啓動配置, 因此所有覆蓋 init() 方法的 Servlet 應調用 super.init() 以確保仍然執行這些任務。


  (2) service() 方法

  service() 方法是 Servlet 的核心。每當一個客戶請求一個HttpServlet 對象,該對象的service() 方法就要被調用,而且傳遞給這個方法一個"請求"(ServletRequest)對象和一個"響應"(ServletResponse)對象作爲參數。 在 HttpServlet 中已存在 service() 方法。缺省的服務功能是調用與 HTTP 請求的方法相應的 do 功能。例如, 如果 HTTP 請求方法爲 GET,則缺省情況下就調用 doGet() 。Servlet 應該爲 Servlet 支持的 HTTP 方法覆蓋 do 功能。因爲 HttpServlet.service() 方法會檢查請求方法是否調用了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。

  (3)doGet()方法

  當一個客戶通過HTML 表單發出一個HTTP GET請求或直接請求一個URL時,doGet()方法被調用。與GET請求相關的參數添加到URL的後面,並與這個請求一起發送。當不會修改服務器端的數據時,應該使用doGet()方法

                                                                         -------------------------這裏我插一句,doGet和doPost爲表單提交數據的兩種方法。

  (4)doPost()方法

  當一個客戶通過HTML 表單發出一個HTTP POST請求時,doPost()方法被調用。與POST請求相關的參數作爲一個單獨的HTTP 請求從瀏覽器發送到服務器。當需要修改服務器端的數據時,應該使用doPost()方法

   doGet(),doPost()和service()的聯繫:

   doGet()的調用順序:1.service() 2.super.service 3.doGet (doPost類似)。可見service方法是核心。

   doGet(),doPost() 常見異常:HTTP Status 405-HTTP method POST is not supported by this URL

   解決方法:增加doPost() 方法即可。

  (5) destroy() 方法

  destroy() 方法僅執行一次,即在服務器停止且卸裝Servlet 時執行該方法。典型應用:管理服務器端資源。例如,如果 Servlet 在運行時會累計統計數據,則可以編寫一個 destroy() 方法,該方法用於在未裝入 Servlet 時將統計數字保存在文件中。另一個示例是關閉數據庫連接。

  當服務器卸裝 Servlet 時,將在所有 service() 方法調用完成後,或在指定的時間間隔過後調用 destroy() 方法。

 

今天面試被提到的doGet()和doPost()兩個方法的不同,還有以後可能被問到的問題,都被我用紅色註明了。

還被提及到抽象函數和接口的區別,以及抽象函數和接口是否可實例化,如果可實例化,那又該怎麼辦?

恆心破萬卷,加油!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章