servlet:
- 一個(gè)類繼承了HTTPServlet,重寫了方法就成為了一個(gè)組件给僵。
- 運(yùn)行在應(yīng)用服務(wù)器上的代碼->servlet
- 兩種創(chuàng)建方法:請(qǐng)求毫捣、web.xml。
- servlet路徑必須“/”開頭帝际,接收客戶端請(qǐng)求蔓同。
- 繼承httpservlet 需要重寫doPost和doGet
- tomcat運(yùn)行servlet,幫我們調(diào)用doPost或doGet方法蹲诀,tomcat傳request和response對(duì)象
- tomcat會(huì)為每個(gè)請(qǐng)求創(chuàng)建一個(gè)線程斑粱,每個(gè)線程用同一個(gè)對(duì)象。
- tomcat默認(rèn)在web-inf下的lib目錄下找相關(guān)包脯爪。
servlet生命周期:
- 初始化階段:
- 加載servlet類
- 創(chuàng)建servletconfig對(duì)象 此對(duì)象包含初始化配置信息则北,并與ServletContext對(duì)象關(guān)聯(lián)矿微。
- 創(chuàng)建servlet對(duì)象
- 調(diào)用init(ServletConfig sc) :容器在創(chuàng)建好servlet對(duì)象后調(diào)用該方法進(jìn)行初始化。使servlet與ServletConfig對(duì)象關(guān)聯(lián)尚揣。ServletContext對(duì)象也產(chǎn)生關(guān)聯(lián)涌矢,可以直接getServletContext(),進(jìn)入此初始化階段有兩種情況:1.客戶端第一次發(fā)出對(duì)該servlet的請(qǐng)求快骗;2.在web.xml中設(shè)置了<load-on-startup>元素娜庇。
- 運(yùn)行階段:
- 創(chuàng)建req和res對(duì)象。
- 調(diào)用service(Request req,Response res) 負(fù)責(zé)響應(yīng)客戶請(qǐng)求(根據(jù)路徑訪問指定servlet)方篮,執(zhí)行doGet或doPost方法名秀,返回響應(yīng),返回響應(yīng)后銷毀res和req對(duì)象藕溅。
- 銷毀階段
- destroy 釋放servlet占用的資源匕得,關(guān)閉應(yīng)用服務(wù)器時(shí)自動(dòng)調(diào)用該方法。
- servlet容器銷毀ServletConfig對(duì)象巾表。
- getServletConfig() 返回ServletConfig對(duì)象耗跛。包含了servlet初始化信息。
- getServletInfo() 返回一個(gè)字符串攒发,包含servlet創(chuàng)建者版本等信息。
ServletConfig:
- 初始化:
servlet容器創(chuàng)建一個(gè)servlet對(duì)象會(huì)為這個(gè)servlet對(duì)象創(chuàng)建一個(gè)ServletConfig對(duì)象晋南,該對(duì)象中包含了這個(gè)Servlet的初始化參數(shù)惠猿;在調(diào)用init(config)方法時(shí)傳給servlet對(duì)象,ServletConfig并同時(shí)與ServletContext對(duì)象建立關(guān)聯(lián)
- 初始化參數(shù)的設(shè)置:
在web.xml配置servlet時(shí)通過<init-param>設(shè)置初始化參數(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容器在啟動(dòng)一個(gè)web應(yīng)用時(shí)就會(huì)創(chuàng)建一個(gè)ServletContext對(duì)象:一個(gè)web應(yīng)用只有一個(gè)ServletContext對(duì)象偶妖,這個(gè)web應(yīng)用下的所有servlet共享同一個(gè)ServletContext對(duì)象,通過這個(gè)ServletContext對(duì)象來訪問此servlet容器內(nèi)(服務(wù)器政溃,包括多個(gè)web應(yīng)用)的各種資源趾访。
- 常用方法:
- 用于在本web應(yīng)用下存取共享數(shù)據(jù)的方法:
.setAttribute(String name,Object object);
.getAttribute(String name);
.getAttributeNames();
.removeAttribute(String name);- 訪問當(dāng)前web應(yīng)用的資源:
.getContextPath();返回當(dāng)前web應(yīng)用的URL入口;
.getInitParameter(String name);返回web應(yīng)用內(nèi)指定的>初始化參數(shù)值董虱。
.getInitParameterNames();返回web應(yīng)用內(nèi)所有初始化參數(shù)名扼鞋。
.getServletContextName();返回web應(yīng)用的名字。
.getRequestDispatcher(String path);返回一個(gè)向其他web組件轉(zhuǎn)發(fā)請(qǐng)求的-RequestDispatcher對(duì)象
- 生命周期:
同web應(yīng)用的生命周期愤诱。是最早被創(chuàng)建云头,最晚被銷毀的對(duì)象。
- ServletContext監(jiān)聽器
- 通過ServletContextListener監(jiān)聽器對(duì)ServletContext對(duì)象進(jìn)行監(jiān)聽淫半,也就是對(duì)web應(yīng)用進(jìn)行監(jiān)聽溃槐。
- serlvet容器啟動(dòng)web應(yīng)用會(huì)觸發(fā)ServletContextEvent事件,該事件由ServletContextListener監(jiān)聽器進(jìn)行處理科吭,該接口中定義兩種方法:
- contextInitalized(ServletContextEvent sc);啟動(dòng)web應(yīng)用調(diào)用該方法昏滴,在此之后初始化filter猴鲫,再初始化特定servlet。
- contextDestroyed(ServletContextEvent sc);關(guān)閉web應(yīng)用時(shí)調(diào)用該方法谣殊,在銷毀servlet和filter之后才調(diào)用此方法拂共。