Java Servlet 開發工具(JSDK)提供了多個軟體包,在編寫 Servlet 時需要用到這些軟體包。其中包括兩個用於所有 Servlet 的基本軟體包:javax.servlet 和 javax.servlet.http。可從sun公司的Web網站下載 Java Servlet 開發工具。 下面主要介紹javax.servlet.http提供的HTTP Servlet應用編程介面。
HTTP Servlet 使用一個 HTML 表格來發送和接收資料。要建立一個 HTTP Servlet,請擴充 HttpServlet 類, 該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個子類。 HTML 表單是由 <FORM> 和 </FORM> 標記定義的。表單中典型地包含輸入欄位(如文本輸入欄位、複選框、選項按鈕和挑選清單)和用於提交資料的按鈕。當提交資訊時,它們還指定伺服器應執行哪一個Servlet(或其它的程式)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。
(1) init() 方法
在 Servlet 的生命期中,僅執行一次 init() 方法。它是在伺服器裝入 Servlet 時執行的。 可以設定管理員,以在啟動伺服器或客戶機首次訪問 Servlet 時裝入 Servlet。 無論有多少客戶機訪問 Servlet,都不會重複執行 init() 。
預設的 init() 方法通常是符合要求的,但也可以用定製 init() 方法來覆蓋它,典型的是管理伺服器端資源。 例如,可能編寫一個定製 init() 來只用於一次裝入 GIF 映像,改進 Servlet 返回 GIF 映像和含有多個客戶機請求的效能。另一個樣本是初始化資料庫連接。預設的 init() 方法設定了 Servlet 的初始化參數,並用它的 ServletConfig 對象參數來啟動配置, 因此所有覆蓋 init() 方法的 Servlet 應調用 super.init() 以確保仍然執行這些任務。在調用 service() 方法之前,應確保已完成了 init() 方法。
(2) service() 方法
service() 方法是 Servlet 的核心。每當一個客戶請求一個HttpServlet 對象,該對象的service() 方法就要被調用,而且傳遞給這個方法一個"請求"(ServletRequest)對象和一個"響應"(ServletResponse)對象作為參數。 在 HttpServlet 中已存在 service() 方法。預設的服務功能是調用與 HTTP 要求的方法相應的 do 功能。例如, 如果 HTTP 要求方法為 GET,則預設情況下就調用 doGet() 。Servlet 應該為 Servlet 支援的 HTTP 方法覆蓋 do 功能。因為 HttpServlet.service() 方法會檢查要求方法是否調用了適當的處理方法,不必要覆蓋 service() 方法。只需覆蓋相應的 do 方法就可以了。
= 當一個客戶通過HTML 表單發出一個HTTP POST請求時,doPost()方法被調用。與POST請求相關的參數作為一個單獨的HTTP 要求從瀏覽器發送到伺服器。當需要修改伺服器端的資料時,應該使用doPost()方法。
= 當一個客戶通過HTML 表單發出一個HTTP GET請求或直接請求一個URL時,doGet()方法被調用。與GET請求相關的參數添加到URL的後面,並與這個請求一起發送。當不會修改伺服器端的資料時,應該使用doGet()方法。
Servlet的響應可以是下列幾種類型:
一個輸出資料流,瀏覽器根據它的內容類型(如text/HTML)進行解釋。
一個HTTP錯誤響應, 重新導向到另一個URL、servlet、JSP。
(3) destroy() 方法
destroy() 方法僅執行一次,即在伺服器停止且卸裝Servlet 時執行該方法。典型的,將 Servlet 作為伺服器處理序的一部分來關閉。預設的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理伺服器端資源。例如,如果 Servlet 在運行時會累計統計資料,則可以編寫一個 destroy() 方法,該方法用於在未裝入 Servlet 時將統計數字儲存在檔案中。另一個樣本是關閉資料庫連接。
當伺服器卸裝 Servlet 時,將在所有 service() 方法調用完成後,或在指定的時間間隔過後調用 destroy() 方法。一個Servlet 在運行service() 方法時可能會產生其它的線程,因此請確認在調用 destroy() 方法時,這些線程已終止或完成。
(4) GetServletConfig()方法
GetServletConfig()方法返回一個 ServletConfig 對象,該對象用來返回初始化參數和ServletContext。ServletContext 介面提供有關servlet 的環境資訊。
(5) GetServletInfo()方法
GetServletInfo()方法是一個可選的方法,它提供有關servlet 的資訊,如作者、版本、著作權。
當伺服器調用sevlet 的Service()、doGet()和doPost()這三個方法時,均需要 "請求"和"響應"對象作為參數。"請求"對象提供有關請求的資訊,而"響應"對象提供了一個將響應資訊返回給瀏覽器的一個通訊途徑。javax.servlet 軟體包中的相關類為ServletResponse和ServletRequest,而javax.servlet.http 軟體包中的相關類為HttpServletRequest 和 HttpServletResponse。
Servlet 通過這些對象與伺服器通訊並最終與客戶機通訊。Servlet 能通過調用"請求"對象的方法獲知客戶機環境,伺服器環境的資訊和所有由客戶機提供的資訊。Servlet 可以調用"響應"對象的方法發送響應,該響應是準備發回客戶機的。