Servlet、ServletConfig、ServletContext生命周期

servlet:

  • 一個類繼承了HTTPServlet,重寫了方法就成為了一個組件。
  • 運行在應用服務器上的代碼->servlet
  • 兩種創(chuàng)建方法:請求、web.xml。
  • servlet路徑必須“/”開頭,接收客戶端請求。
  • 繼承httpservlet 需要重寫doPost和doGet
  • tomcat運行servlet,幫我們調(diào)用doPost或doGet方法,tomcat傳request和response對象
  • tomcat會為每個請求創(chuàng)建一個線程,每個線程用同一個對象。
  • tomcat默認在web-inf下的lib目錄下找相關包。

servlet生命周期:

  • 初始化階段:
  • 加載servlet類
  • 創(chuàng)建servletconfig對象 此對象包含初始化配置信息,并與ServletContext對象關聯(lián)。
  • 創(chuàng)建servlet對象
  • 調(diào)用init(ServletConfig sc) :容器在創(chuàng)建好servlet對象后調(diào)用該方法進行初始化。使servlet與ServletConfig對象關聯(lián)。ServletContext對象也產(chǎn)生關聯(lián),可以直接getServletContext(),進入此初始化階段有兩種情況:1.客戶端第一次發(fā)出對該servlet的請求;2.在web.xml中設置了<load-on-startup>元素。
  • 運行階段:
  • 創(chuàng)建req和res對象。
  • 調(diào)用service(Request req,Response res) 負責響應客戶請求(根據(jù)路徑訪問指定servlet),執(zhí)行doGet或doPost方法,返回響應,返回響應后銷毀res和req對象。
  • 銷毀階段
  • destroy 釋放servlet占用的資源,關閉應用服務器時自動調(diào)用該方法。
  • servlet容器銷毀ServletConfig對象。
  • getServletConfig() 返回ServletConfig對象。包含了servlet初始化信息。
  • getServletInfo() 返回一個字符串,包含servlet創(chuàng)建者版本等信息。

ServletConfig:

  • 初始化:

servlet容器創(chuàng)建一個servlet對象會為這個servlet對象創(chuàng)建一個ServletConfig對象,該對象中包含了這個Servlet的初始化參數(shù);在調(diào)用init(config)方法時傳給servlet對象,ServletConfig并同時與ServletContext對象建立關聯(lián)

  • 初始化參數(shù)的設置:

在web.xml配置servlet時通過<init-param>設置初始化參數(shù)。代碼如下:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.neuedu.servlet.LoginServlet</servlet-class>
    <init-param>
        <param-name>color</param-name>
        <param-value>blue</param-value>
    </init-param>
    <init-param>
            <param-name>size</param-name>
            <param-value>15</param-value>
    </init-param>
</servlet>
  • 常用方法:

.getInitParameter(String name);
.getInitParameterNames();
.getServletContext();
.getServletName();

ServletContext:

  • 初始化:

servlet容器在啟動一個web應用時就會創(chuàng)建一個ServletContext對象:一個web應用只有一個ServletContext對象,這個web應用下的所有servlet共享同一個ServletContext對象,通過這個ServletContext對象來訪問此servlet容器內(nèi)(服務器,包括多個web應用)的各種資源。

  • 常用方法:
  • 用于在本web應用下存取共享數(shù)據(jù)的方法:
    .setAttribute(String name,Object object);
    .getAttribute(String name);
    .getAttributeNames();
    .removeAttribute(String name);
  • 訪問當前web應用的資源:
    .getContextPath();返回當前web應用的URL入口;
    .getInitParameter(String name);返回web應用內(nèi)指定的>初始化參數(shù)值。
    .getInitParameterNames();返回web應用內(nèi)所有初始化參數(shù)名。
    .getServletContextName();返回web應用的名字。
    .getRequestDispatcher(String path);返回一個向其他web組件轉(zhuǎn)發(fā)請求的-RequestDispatcher對象
  • 生命周期:

同web應用的生命周期。是最早被創(chuàng)建,最晚被銷毀的對象。

  • ServletContext監(jiān)聽器
  • 通過ServletContextListener監(jiān)聽器對ServletContext對象進行監(jiān)聽,也就是對web應用進行監(jiān)聽。
  • serlvet容器啟動web應用會觸發(fā)ServletContextEvent事件,該事件由ServletContextListener監(jiān)聽器進行處理,該接口中定義兩種方法:
  • contextInitalized(ServletContextEvent sc);啟動web應用調(diào)用該方法,在此之后初始化filter,再初始化特定servlet。
  • contextDestroyed(ServletContextEvent sc);關閉web應用時調(diào)用該方法,在銷毀servlet和filter之后才調(diào)用此方法。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容