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)用此方法。