Servlet是java的一個類,定義在javax.servlet包下。Servlet是由服務器負責管理運行,當多個 客戶請求同一個Servlet時,服務器爲每個客戶啓動一個線程而不是一個進程,這些線程由服務器 統一管理。
Servlet是運行在服務器端的,由服務器進行初始化。與Servlet生命週期相關的函數有:init()、service()、destroy()。
(1)init():初始化servlet。Servlet第一次被請求加載時,服務器初始化這個servlet,即創建 一個servlet對象,該對象調用init()方法完成必要的初始化工作。該方法是Servlet類中的方法,
我們可以在servlet中重寫這個方法。方法描述:
public void init(ServletConfig config) throws ServletException
servlet第一次被請求加載時,服務器初始化一個servlet,即創建一個servlet對象,這個對象調用init方法完成必要的初始化工作。該方法在執行時,servlet引擎會把一個SevletConfig類型的對象傳遞給init()方法,這個對象就被保存在servlet對象中,直到servlet對象被消滅,這個ServletConfig對象負責向servlet傳遞服務設置信息,如果傳遞失敗就會發生ServeletException,servlet就不能正常工作。
我們已經知道,當多個客戶請求一個servlet時,引擎爲每個客戶啓動一個線程,那麼servlet類的成員變量被所有的線程共享。
(2)Service():當客戶對servlet進行請求,服務器執行該方法以響應客戶請求。該方法是 Servlet類中的方法,我們可以在servlet中直接繼承該方法或重寫這個方法。方法描述:
public void service(HttpServletRequest request HttpServletResponse response) throw
ServletException,IOException
當servlet成功創建和初始化之後,servlet就調用service方法來處理用戶的請求並返回響應。Servlet引擎將兩個參數傳遞給該方法,一個ServletRequest類型的對象,該對象封裝了用戶的請求信息,此對象調用相應的方法可以獲取封裝的信息,即使用這個對象可以獲取用戶提交的信息。另外一個參數對象是ServletResponse類型的對象,該對象用來響應用戶的請求。和init方法不同的是,init方法只被調用一次,而service方法可能被多次的調用,我們已經知道,當後續的客戶請求servlet服務時,Servlet引擎將啓動一個新的線程,在該線程中,servlet調用service方法響應客戶的請求,也就是說,每個客戶的每次請求都導致service方法被調用執行,調用過程運行在不同的線程中,互不干擾。每一次客戶請求service方法都被調用一次,且服務器均會爲每一次請求創建ServletRequest、ServletResponse對象。
(3)Destroy():當該servlet被移除或服務器被關閉時服務器調用該方法消滅servlet對象。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Hello extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void service(HttpServletRequest reqest,HttpServletResponse response) throws IOException
{ //獲得一個向客戶發送數據的輸出流:
PrintWriter out=response.getWriter();
response.setContentType("text/html;charset=GB2312");//設置響應的MIME類型。
out.println("<HTML> <BODY>");
out.println("Simple servlet");
out.println("</body> </html>");
}
}