servlet生命週期

Servlet的生命週期分爲四個階段
1,創建Servlet對象,通過服務器反射機制創建Servlet對象,第一次請求時纔會創建。(默認)
2,調用Servlet對象的init()方法,初始化Servlet的信息,init()方法只會在創建後被調用一次
3,響應請求,調用service()或者是doGet(),doPost()方法來處理請求,這些方法是運行的在多線程狀態下的。
4,在長時間沒有被調用或者是服務器關閉時,會調用destroy()方法來銷燬Servlet對象。

可以通過web.xml文件可以配置Servlet對象的創建時間,
<load-on-startup>數字</load-on-startup>,表示服務器啓動時創建,並依照數字大小按順序創建,只用重要的Servlet纔會是用這個設置。

可以通過<init-param>標籤來配置初始化參數,可以用ServletConfig對象的
getInitParameter(String name)方法來得到參數。
 
<init-param>
<param-name>...</param-name>
<param-value>...</param-value>
</init-param>

多線程下所操作的變量,如果操作的是一個變量,且兼有讀寫操作,就要考慮加上同步,但同步不能亂加,否則會造成死鎖問題。

init()和destroy()方法都是運行在單線程下的。

GenericServlet類中的有參和無參的init方法。
  public void init(ServletConfig config)throws ServletException
    {
        this.config = config;
        init();
    }

    public void init()throws ServletException
    {
 .....;//覆蓋了的無參的init()方法,會在Servlet創建時調用有參的init方法時
  也會被調用。
    }
 
HttpServlet類中參數不同的service方法的調用關係。
public void service(HttpServletRequest req,HttpServletResponse res){
 .......;
 .......;
}
public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException
    {
        HttpServletRequest request;
        HttpServletResponse response;
        try
        {
            request = (HttpServletRequest)req;
            response = (HttpServletResponse)res;
        }
        catch(ClassCastException e)
        {
            throw new ServletException("non-HTTP request or response");
        }
        service(request, response);
    }

發佈了16 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章