Servlet API概覽
Servlet API有以下4個(gè)包:
- javax.servlet丈挟,其中包含Servlet和Servlet容器之間契約的類和接口蜒谤。
- javax.servlet.http妄荔,其中包含定義HTTP Servlet(采用了HTTP協(xié)議的Servlet)和Servlet容器之間契約的類和接口吃溅。
- javax.servlet.annotation,其中包含標(biāo)注Servlet、Filter傍衡、Listener的標(biāo)注。它還為被標(biāo)注元件定義元數(shù)據(jù)负蠕。
- javax.servlet.descriptor蛙埂,其中包含提供程序化登錄web應(yīng)用程序的配置信息的類型。
下圖展示了javax.servlet中的主要類型
Servlet技術(shù)的核心是Servlet接口遮糖,所有Servlet類都必須直接或間接實(shí)現(xiàn)它绣的。Servlet接口定義了Servlet與Servlet容器之間的契約。這個(gè)契約歸結(jié)起來就是欲账,Servlet容器將 Servlet類載入內(nèi)存屡江,并在Servlet實(shí)例上調(diào)用具體的方法。在一個(gè)應(yīng)用程序中赛不,每種Servlet類型只能有一個(gè)實(shí)例惩嘉。
用戶請(qǐng)求致使Servlet容器調(diào)用Servlet的Service方法,并傳入一個(gè)ServletRequest實(shí)例和一個(gè)ServletResponse實(shí)例俄删。ServletRequest中封裝了當(dāng)前的HTTP請(qǐng)求宏怔,因此奏路,Servlet開發(fā)人員不必解析和操作原始的HTTP數(shù)據(jù)畴椰。ServletResponse表示當(dāng)前用戶的HTTP響應(yīng),使得將響應(yīng)發(fā)回給用戶變得十分容易鸽粉。
對(duì)于每一個(gè)應(yīng)用程序斜脂,Servlet容器還會(huì)創(chuàng)建一個(gè)ServletContext實(shí)例。這個(gè)對(duì)象中封裝了上下文(應(yīng)用程序)的環(huán)境詳情触机。每個(gè)上下文只有一個(gè)ServletContext帚戳。每個(gè)Servlet實(shí)例也都有一個(gè)封裝Servlet配置的ServletConfig。
Servlet接口
Servlet接口中定義了init儡首、service片任、destory、getServletInfo和getServletConfig這五個(gè)方法蔬胯。其中init对供、service和destory方法是生命周期方法,Servlet容器根據(jù)以下規(guī)則調(diào)用這3個(gè)方法:
- init:當(dāng)該Servlet第一次被請(qǐng)求時(shí),Servlet容器會(huì)調(diào)用這個(gè)方法产场。這個(gè)方法在后續(xù)請(qǐng)求中不會(huì)再被調(diào)用鹅髓。我們可以利用這個(gè)方法執(zhí)行相應(yīng)初始化工作。調(diào)用這個(gè)方法時(shí)京景,Servlet容器會(huì)傳入一個(gè)ServletConfig(關(guān)于ServletConfig的內(nèi)容會(huì)在后面講到)窿冯。
- service:每當(dāng)請(qǐng)求Servlet時(shí),Servlet容器就會(huì)調(diào)用這個(gè)方法确徙。編寫代碼時(shí)醒串,假設(shè)Servlet要在這里被請(qǐng)求。第一次請(qǐng)求Servlet時(shí)鄙皇,Servlet容器調(diào)用init方法和Service方法厦凤。后續(xù)的請(qǐng)求將只調(diào)用Service方法。
- destory:當(dāng)要銷毀Servlet時(shí)育苟,Servlet容器就會(huì)調(diào)用這個(gè)方法较鼓。當(dāng)要卸載應(yīng)用程序,或者當(dāng)要關(guān)閉Servlet容器時(shí)违柏,就會(huì)發(fā)生這種情況博烂。一般會(huì)在這個(gè)方法中編寫清除代碼。
Servlet中的另外兩個(gè)方法是非生命周期方法漱竖,即getServletInfo和getServletConfig:
- getServletInfo:這個(gè)方法會(huì)返回Servlet的描述禽篱。你可以返回有用或?yàn)閚ull的任意字符串。
- getServletConfig:這個(gè)方法會(huì)返回由Servlet容器傳給init方法的ServletConfig馍惹。