高清国产av一区二区三区_亚洲欧美日韩在线_无码熟妇人妻av在线影片免费_在线无码一级伊伊_爽好舒服高H自慰软件_亚洲熟女区偷拍区高清区_午夜福利影院啪啪_亚洲国产黄片在线播放_中文字幕日韩精品乐乐影院_久久国产亚洲日韩欧美精品

掃描二維碼關(guān)注

首頁 APP開發(fā)小程序開發(fā) 微信公眾號(hào) 網(wǎng)站建設(shè) 營銷推廣 經(jīng)典案列 產(chǎn)品服務(wù) 關(guān)于我們

“學(xué)習(xí)不僅是掌握知識(shí)”

向書本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識(shí),
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造

Servlet接口

2019/3/6 10:48:36

Servlet接口

Servlet接口

Servlet接口是servlet API的主要抽象。所有servlet或者直接實(shí)現(xiàn)該接口,或者更常見的繼承一個(gè)實(shí)現(xiàn)該接口的類。servlet API中有兩個(gè)類實(shí)現(xiàn)了servlet接口,為GenericServlet和HttpServlet。大多數(shù)情況下,開發(fā)人員將繼承HttpServlet以實(shí)現(xiàn)他們的servlet。

2.1 請(qǐng)求處理方法

Servlet接口定義了一個(gè)service方法來處理客戶端請(qǐng)求。當(dāng)servlet容器將每個(gè)請(qǐng)求傳遞給servlet實(shí)例時(shí)都會(huì)調(diào)用該方法。

Web應(yīng)用處理并發(fā)請(qǐng)求通常要求web開發(fā)人員設(shè)計(jì)servlet的service方法可以多線程執(zhí)行。

通常web容器通過不同線程并發(fā)執(zhí)行service方法,處理對(duì)于同一個(gè)servlet的并發(fā)請(qǐng)求。

2.1.1 HTTP專有請(qǐng)求處理方法

HttpServlet抽象子類在Servlet接口基礎(chǔ)上還添加了一些附加方法,由HttpServlet類的service方法自動(dòng)調(diào)用,以處理基于HTTP的請(qǐng)求。這些方法是:

• doGet處理HTTP GET請(qǐng)求

• doPost處理HTTP POST請(qǐng)求

• doPut處理HTTP PUT請(qǐng)求

• doDelete處理HTTP DELETE請(qǐng)求

• doHead處理HTTP HEAD請(qǐng)求

• doOptions處理HTTP OPTIONS請(qǐng)求

• doTrace處理HTTP TRACE請(qǐng)求
 

通常在開發(fā)基于HTTP的servlet時(shí),servlet開發(fā)人員自身只需要關(guān)心doGet和doPost方法。其他方法只為非常熟悉HTTP編程的程序員們使用。

2.1.2 附加方法

doPut和doDelete方法允許Servlet開發(fā)人員支持采用這些特性的HTTP/1.1客戶端。HttpServlet 的doHead方法是一種特殊的doGet方法,只返回doGet方法生成的header。doOptions方法返回servlet支持的所有HTTP方法。doTrace方法生成的響應(yīng),包含TRACE請(qǐng)求中發(fā)送的所有header實(shí)例。

對(duì)于只支持HTTP/1.0的容器,只支持doGet,doHead和doPost方法,因?yàn)镠TTP/1.0沒有定義PUT,DELETE,OPTIONS和TRACE方法。

2.1.3 有條件的GET支持

HttpServlet接口定義了getLastModified方法以支持有條件的GET操作。一個(gè)有條件的GET操作所請(qǐng)求的資源,只有在指定時(shí)間內(nèi)被修改才被發(fā)送。在適當(dāng)?shù)那闆r下,該方法的實(shí)現(xiàn)可能會(huì)有效地利用網(wǎng)絡(luò)資源。

2.2 實(shí)例數(shù)

正如第13章“部署描述符”所述,作為含servlet的web應(yīng)用部署描述符一部分的Servlet聲明,控制著servlet容器如何提供servlet實(shí)例。

對(duì)于一個(gè)不駐留于分布式環(huán)境(默認(rèn))的servlet而言,servlet容器必須保證每個(gè)servlet聲明只使用一個(gè)實(shí)例。不過,對(duì)于實(shí)現(xiàn)SingleThreadModel接口的servlet而言,servlet容器可以實(shí)例化多個(gè)實(shí)例以處理繁重的請(qǐng)求加載,但是一個(gè)特定實(shí)例只能一次處理請(qǐng)求。

如果作為應(yīng)用一部分的servlet被部署為分布式,部署描述符中標(biāo)明,那么容器只能讓每個(gè)虛擬機(jī)(VM)每個(gè)servlet聲明持有一個(gè)實(shí)例。不過,如果分布式應(yīng)用中的servlet實(shí)現(xiàn)了SingleThreadModel接口,那么容器可以讓容器中每個(gè)VM實(shí)例化多個(gè)servlet實(shí)例。

2.2.1 單線程模型注意點(diǎn)

使用SingleThreadModel接口保證一次只能有一個(gè)線程執(zhí)行指定的servlet實(shí)例的service方法。要注意這項(xiàng)保證只適用于每個(gè)servlet實(shí)例,因?yàn)槿萜骺梢赃x擇池化這些對(duì)象。這些對(duì)象一次可以被多個(gè)servlet實(shí)例訪問,比如HttpSession實(shí)例,在任意時(shí)刻對(duì)于多個(gè)servlet都是可用的,即使它實(shí)現(xiàn)了SingleThreadModel。

2.3 servlet生命周期

servlet通過定義生命周期來進(jìn)行管理,包括如何加載,實(shí)例化與初始化,處理客戶端的請(qǐng)求,以及如何撤銷服務(wù)。生命周期在API中表示為javax.servlet.Servlet接口的init,service和destroy方法,所有servlet必須直接實(shí)現(xiàn)或者通過GenericServlet或HttpServlet抽象類間接實(shí)現(xiàn)。

2.3.1 加載和實(shí)例化

servlet容器負(fù)責(zé)加載和實(shí)例化servlet。加載和實(shí)例化可以在容器啟動(dòng)時(shí)進(jìn)行,也可以延遲到容器認(rèn)為需要servlet來處理請(qǐng)求時(shí)。

當(dāng)容器引擎啟動(dòng)時(shí),servlet容器必須能定位所需要的servlet類。Servlet容器使用通常的Java類加載工具加載servlet類??梢詮谋镜匚募到y(tǒng),遠(yuǎn)程文件系統(tǒng)或者其他網(wǎng)絡(luò)服務(wù)中加載。

加載Servlet類后,容器將它實(shí)例化。

2.3.2 初始化

在servlet對(duì)象實(shí)例化之后,容器必須在它能處理客戶端請(qǐng)求之前將其初始化。初始化是為了servlet能夠讀取持久性的配置數(shù)據(jù),初始化代價(jià)高的資源(比如基于JDBC連接),以及執(zhí)行其他一次動(dòng)作。容器通過調(diào)用Servlet接口的init方法,并使用實(shí)現(xiàn)ServletConfig接口的單個(gè)(每個(gè)servlet聲明)對(duì)象來初始化servlet實(shí)例。配置對(duì)象允許servlet訪問來自web應(yīng)用配置信息的名-值初始化參數(shù),還允許servlet訪問一個(gè)實(shí)現(xiàn)ServletContext接口的對(duì)象,它描述servlet運(yùn)行時(shí)環(huán)境。關(guān)于ServletContext接口的更多信息參見第3章“Servlet上下文”。

2.3.2.1 初始化的錯(cuò)誤情形

在初始化過程中,se


深圳市南山區(qū)南山街道南海大道西桂廟路北陽光華藝大廈1棟4F、4G-04

咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967

精銳軟件

Copyright? 2018-2023 深圳精銳軟件技術(shù)有限公司 All Rights Reserved. ICP備案號(hào):粵ICP備18108116號(hào)-8 公安備案號(hào):粵公網(wǎng)安備44030502009460號(hào)