陳杰
摘 要 隨著進(jìn)入信息社會(huì),計(jì)算機(jī)已經(jīng)成為人們生活中必不可少的工具,基于B/S模式的應(yīng)用軟件的使用也越來(lái)越流行。而J2EE就是眾多架構(gòu)中最流行的一種開(kāi)發(fā)架構(gòu),其目的就是為了能夠使企業(yè)開(kāi)發(fā)者大幅縮短開(kāi)發(fā)周期以及方便維護(hù)管理的一種體系結(jié)構(gòu)。SUN的J2EE是一種運(yùn)用java2平臺(tái)簡(jiǎn)化企業(yè)解決方案的開(kāi)發(fā)、部署,維護(hù)和管理相關(guān)的復(fù)雜問(wèn)題的架構(gòu)。
關(guān)鍵詞 J2EE 架構(gòu) 組件
中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A
J2EE是java2平臺(tái)的企業(yè)版,是一個(gè)基于組件-容器模型的系統(tǒng)平臺(tái),其核心概念是容器。容器底層是J2EE服務(wù)器,它為容器提供J2EE中定義的各種服務(wù)和API。一個(gè)J2EE服務(wù)器可以支持一種或多種容器。服務(wù)是組件和容器之間,以及容器和J2EE服務(wù)器之間的接口,在實(shí)現(xiàn)層面上它就是一系列API和協(xié)議,J2EE平臺(tái)定義了一組標(biāo)準(zhǔn)的服務(wù)。J2EE的技術(shù)核心是EJB的模型、角色及與其他技術(shù)的關(guān)系。同時(shí),Java語(yǔ)言的跨平臺(tái)特性,使得其在企業(yè)的Web應(yīng)用上得到廣泛的部署。J2EE平臺(tái)已經(jīng)成為使用最廣泛的WEB架構(gòu),其最終目的是成為使企業(yè)開(kāi)發(fā)者能夠大幅縮短投放市場(chǎng)時(shí)間的架構(gòu)。
本文的研究是基于作者通過(guò)在項(xiàng)目開(kāi)發(fā)中,對(duì)所運(yùn)用到的Servlet技術(shù)的學(xué)習(xí)以及自己總結(jié)所得的。
servlet容器是一個(gè)Web Server或application server的一部分,它提供網(wǎng)絡(luò)服務(wù)(請(qǐng)求和響應(yīng)基于網(wǎng)絡(luò)服務(wù)來(lái)發(fā)送),解碼基于MIME的請(qǐng)求,格式化基于MIME的響應(yīng)。一個(gè)servlet容器也通過(guò)servlet的生命周期來(lái)包含并管理servlet。
所有的servlet容器必須支持 HTTP 作為請(qǐng)求/響應(yīng)協(xié)議,但是也可以支持其它的基于請(qǐng)求/響應(yīng)的協(xié)議,比如HTTPS。
Servlets相對(duì)于 server extension機(jī)制有如下優(yōu)點(diǎn):
(1)它們比CGI腳本要快的多,因?yàn)樗鼈兪褂昧艘粋€(gè)不同的處理模型。
(2)它們使用一個(gè)標(biāo)準(zhǔn)的許多web servers都支持的API。
(3)它們具有Java編程語(yǔ)言所有的優(yōu)點(diǎn),包括開(kāi)發(fā)簡(jiǎn)單以及平臺(tái)獨(dú)立。
(4)它們可以利用Java平臺(tái)上的大量的API。
一個(gè)servlet通過(guò)一個(gè)明確定義的生命周期來(lái)管理,該生命周期定義了servlet是如何被加載并實(shí)例化的,如何初始化的,如何處理來(lái)自客戶(hù)端的請(qǐng)求,以及如何停止服務(wù)。該生命周期通過(guò)API中的javax.servlet.Servlet接口的init, service, and destroy方法來(lái)描述,所以的servlet必須直接地或者間接地實(shí)現(xiàn)該接口,間接實(shí)現(xiàn)時(shí)可以借助GenericServlet或HttpServlet抽象類(lèi)來(lái)實(shí)現(xiàn)。
加載和實(shí)例化,servlet容器負(fù)責(zé)加載并實(shí)例化servlets。加載和實(shí)例化的動(dòng)作可以在容器啟動(dòng)的時(shí)候執(zhí)行,或者延遲到容器認(rèn)為需要用該servlet來(lái)服務(wù)一個(gè)請(qǐng)求的時(shí)候再執(zhí)行。當(dāng)servlet引擎啟動(dòng)后,該servlet容器必須定位所需要的servlet類(lèi)。在Servlet類(lèi)被加載之后,該容器實(shí)例化之,以供使用。
初始化,在servlet對(duì)象被實(shí)例化之后,容器必須首先初始化該servlet 才能讓它處理來(lái)自客戶(hù)端的請(qǐng)求。提供初始化動(dòng)作,以便一個(gè)serlvet能夠讀取持久化配置數(shù)據(jù),初始化珍貴(costly)資源,以及執(zhí)行其它一次性(one-time)動(dòng)作。容器通過(guò)調(diào)用Servlet接口的init方法來(lái)初始化該servlet,初始化時(shí)會(huì)使用一個(gè)實(shí)現(xiàn)了ServletConfig接口的唯一的對(duì)象。
處理客戶(hù)端請(qǐng)求,在一個(gè)servlet被正確初始化之后,該servlet容器就可以用它來(lái)處理客戶(hù)端請(qǐng)求了??蛻?hù)端請(qǐng)求由ServletRequest類(lèi)型的對(duì)象來(lái)表示。該servlet 通過(guò)調(diào)用一個(gè)ServletResponse類(lèi)型的對(duì)象的方法來(lái)對(duì)請(qǐng)求作出響應(yīng)。這些對(duì)象被作為參數(shù)傳遞給 Servlet接口的 service方法。如果是一個(gè)HTTP請(qǐng)求,容器提供的對(duì)象是HttpServletRequest and HttpServletResponse類(lèi)型的。
銷(xiāo)毀,當(dāng)servlet容器判定一個(gè)servlet應(yīng)該被從服務(wù)中刪除時(shí),它調(diào)用Servlet接口的destroy方法,以便讓servlet釋放其占有的所有資源并保存任意持久狀態(tài)。一旦一個(gè)servlet實(shí)例的destroy方法被調(diào)用,容器不再把其它請(qǐng)求轉(zhuǎn)給該servlet的實(shí)例了。如果容器需要再次使用該servlet,那么它必須使用這個(gè)servlet的新的實(shí)例上。在destroy方法調(diào)用完畢之后,servlet容器必須釋放該servlet實(shí)例,以便它可以被垃圾回收。
參考文獻(xiàn)
[1] Dustin R.Callaway. Inside Servlets: Server-Side Programming for the Java(TM) Platform (2nd Edition).Addison Wesley/Pearson, 2002,2-1.