




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
servlet技術(shù)簡介1.Servlet是什么?
Servlet是使用JavaServlet應(yīng)用程序設(shè)計接口(API)及相關(guān)類和方法的Java程序。除了JavaServletAPI,Servlet還可以使用用以擴展和添加到API的Java類軟件包。Servlet在啟用Java的Web服務(wù)器上或應(yīng)用服務(wù)器上運行并擴展了該服務(wù)器的能力。Javaservlet對于Web服務(wù)器就好象Javaapplet對于Web瀏覽器。Servlet裝入Web服務(wù)器并在Web服務(wù)器內(nèi)執(zhí)行,而applet裝入Web瀏覽器并在Web瀏覽器內(nèi)執(zhí)行。JavaServletAPI定義了一個servlet和Java使能的服務(wù)器之間的一個標(biāo)準(zhǔn)接口,這使得Servlets具有跨服務(wù)器平臺的特性。
Servlet通過創(chuàng)建一個框架來擴展服務(wù)器的能力,以提供在Web上進(jìn)行請求和響應(yīng)服務(wù)。當(dāng)客戶機發(fā)送請求至服務(wù)器時,服務(wù)器可以將請求信息發(fā)送給Servlet,并讓Servlet建立起服務(wù)器返回給客戶機的響應(yīng)。當(dāng)啟動Web服務(wù)器或客戶機第一次請求服務(wù)時,可以自動裝入Servlet。裝入后,Servlet繼續(xù)運行直到其它客戶機發(fā)出請求。Servlet的功能涉及范圍很廣。例如,Servlet可完成如下功能:
(1)創(chuàng)建并返回一個包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的HTML頁面。
(2)創(chuàng)建可嵌入到現(xiàn)有HTML頁面中的一部分HTML頁面(HTML片段)。
(3)與其它服務(wù)器資源(包括數(shù)據(jù)庫和基于Java的應(yīng)用程序)進(jìn)行通信。
(4)用多個客戶機處理連接,接收多個客戶機的輸入,并將結(jié)果廣播到多個客戶機上。例如,Servlet可以是多參與者的游戲服務(wù)器。
(5)當(dāng)允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務(wù)器至applet的新連接,并將該連
接保持在打開狀態(tài)。當(dāng)允許客戶機和服務(wù)器簡單、高效地執(zhí)行會話的情況下,applet也可以啟動客戶瀏覽器和服務(wù)器之間的連接??梢酝ㄟ^定制協(xié)議或標(biāo)準(zhǔn)(如IIOP)進(jìn)行通信。
(6)對特殊的處理采用MIME類型過濾數(shù)據(jù),例如圖像轉(zhuǎn)換和服務(wù)器端包括(SSI)。
(7)將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如,Servlet可以修改如何認(rèn)證用戶。
2.Servlet的生命周期
Servlet的生命周期始于將它裝入Web服務(wù)器的內(nèi)存時,并在終止或重新裝入Servlet時結(jié)束。
(1)初始化
在下列時刻裝入Servlet:
如果已配置自動裝入選項,則在啟動服務(wù)器時自動裝入
在服務(wù)器啟動后,客戶機首次向Servlet發(fā)出請求時
重新裝入Servlet時裝入Servlet后,服務(wù)器創(chuàng)建一個Servlet實例并且調(diào)用Servlet的init()方法。在初始化階段,Servlet初始化參數(shù)被傳遞給Servlet配置對象。
(2)請求處理
對于到達(dá)服務(wù)器的客戶機請求,服務(wù)器創(chuàng)建特定于請求的一個“請求”對象和一個“響應(yīng)”對象。服務(wù)器調(diào)用Servlet的service()方法,該方法用于傳遞“請求”和“響應(yīng)”對象。service()方法從“請求”對象獲得請求信息、處理該請求并用“響應(yīng)”對象的方法以將響應(yīng)傳回客戶機。service()方法可以調(diào)用其它方法來處理請求,例如doGet()、doPost()或其它的方法。
(3)終止
當(dāng)服務(wù)器不再需要Servlet,或重新裝入Servlet的新實例時,服務(wù)器會調(diào)用Servlet的destroy()方法。
3.JavaServletAPI
JavaServlet開發(fā)工具(JSDK)提供了多個軟件包,在編寫Servlet時需要用到這些軟件包。其中包括兩個用于所有Servlet的基本軟件包:javax.servlet和javax.servlet.http??蓮膕un公司的Web站點下載JavaServlet開發(fā)工具。下面主要介紹javax.servlet.http提供的HTTPServlet應(yīng)用編程接口。
HTTPServlet使用一個HTML表格來發(fā)送和接收數(shù)據(jù)。要創(chuàng)建一個HTTPServlet,請擴展HttpServlet類,該類是用專門的方法來處理HTML表格的GenericServlet的一個子類。HTML表單是由<FORM>和</FORM>標(biāo)記定義的。表單中典型地包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。當(dāng)提交信息時,它們還指定服務(wù)器應(yīng)執(zhí)行哪一個Servlet(或其它的程序)。HttpServlet類包含init()、destroy()、service()等方法。其中init()和destroy()方法是繼承的。
(1)init()方法
在Servlet的生命期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時執(zhí)行的。可以配置服務(wù)器,以在啟動服務(wù)器或客戶機首次訪問Servlet時裝入Servlet。無論有多少客戶機訪問Servlet,都不會重復(fù)執(zhí)行init()。
缺省的init()方法通常是符合要求的,但也可以用定制init()方法來覆蓋它,典型的是管理服務(wù)器端資源。例如,可能編寫一個定制init()來只用于一次裝入GIF圖像,改進(jìn)Servlet返回GIF圖像和含有多個客戶機請求的性能。另一個示例是初始化數(shù)據(jù)庫連接。缺省的init()方法設(shè)置了Servlet的初始化參數(shù),并用它的ServletConfig對象參數(shù)來啟動配置,因此所有覆蓋init()方法的Servlet應(yīng)調(diào)用super.init()以確保仍然執(zhí)行這些任務(wù)。在調(diào)用service()方法之前,應(yīng)確保已完成了init()方法。
(2)service()方法
service()方法是Servlet的核心。每當(dāng)一個客戶請求一個HttpServlet對象,該對象的service()方法就要被調(diào)用,而且傳遞給這個方法一個“請求”(ServletRequest)對象和一個“響應(yīng)”(ServletResponse)對象作為參數(shù)。在HttpServlet中已存在service()方法。缺省的服務(wù)功能是調(diào)用與HTTP請求的方法相應(yīng)的do功能。例如,如果HTTP請求方法為GET,則缺省情況下就調(diào)用doGet()。Servlet應(yīng)該為Servlet支持的HTTP方法覆蓋do功能。因為HttpServlet.service()方法會檢查請求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒?,不必要覆蓋service()方法。只需覆蓋相應(yīng)的do方法就可以了。
當(dāng)一個客戶通過HTML表單發(fā)出一個HTTPPOST請求時,doPost()方法被調(diào)用。與POST請求相關(guān)的參數(shù)作為一個單獨的HTTP請求從瀏覽器發(fā)送到服務(wù)"openthepage:");
out.println("<pre>http://<em></em>/IBMWebAs/samples/index.aspl</pre>");
out.println("where<em></em>isthehostnameofyourWebSphere應(yīng)用服
務(wù)器.");
out.println("</body></html>");
out.flush();
}
}
上述ServletSample類擴展HttpServlet抽象類、重寫doGet()方法。在重寫的doGet()方法中,獲取HTTP請求中的一個任選的參數(shù)(myName),該參數(shù)可作為調(diào)用的URL上的查詢參數(shù)傳遞到Servlet。使用示例如下:/servlet/ServletSample?myname=Michael。
*調(diào)用Servlet
要調(diào)用Servlet或Web應(yīng)用程序,請使用下列任一種方法:由URL調(diào)用、在<FORM>標(biāo)記中調(diào)用、在<SERVLET>標(biāo)記中調(diào)用、在JSP文件中調(diào)用、在ASP文件中調(diào)用。
1.由URL調(diào)用Servlet
這里有兩種用Servlet的URL從瀏覽器中調(diào)用該Servlet的方法:
(1)指定Servlet名稱:當(dāng)用WebSphere應(yīng)用服務(wù)器管理器來將一個Servlet實例添加(注冊)到服務(wù)器配置中時,必須指定“Servlet名稱”參數(shù)的值。例如,可以指定將hi作為HelloWorldServlet的Servlet名稱。要調(diào)用該Servlet,需打開/servlet/hi。也可以指定Servlet和類使用同一名稱(HelloWorldServlet)。在這種情況下,將由/servlet/HelloWorldServlet來調(diào)用Servlet的實例。
(2)指定Servlet別名:用WebSphere應(yīng)用服務(wù)器管理器來配置Servlet別名,該別名是用于調(diào)用Servlet的快捷URL??旖軺RL中不包括Servlet名稱。
2.在<FORM>標(biāo)記中指定Servlet
可以在<FORM>標(biāo)記中調(diào)用Servlet。HTML格式使用戶能在Web頁面(即從瀏覽器)上輸入數(shù)據(jù),并向Servlet提交數(shù)據(jù)。例如:
<FORMMETHOD="GET"ACTION="/servlet/myservlet">
<OL>
<INPUTTYPE="radio"NAME="broadcast"VALUE="am">AM<BR>
<INPUTTYPE="radio"NAME="broadcast"VALUE="fm">FM<BR>
</OL>
(用于放置文本輸入?yún)^(qū)域的標(biāo)記、按鈕和其它的提示符。)
</FORM>
ACTION特性表明了用于調(diào)用Servlet的URL。關(guān)于METHOD的特性,如果用戶輸入的信息是通過GET方法向Servlet提交的,則Servlet必須優(yōu)先使用doGet()方法。反之,如果用戶輸入的信息是通過POST方法向Servlet提交的,則Servlet必須優(yōu)先使用doPost()方法。使用GET方法時,用戶提供的信息是查詢字符串表示的URL編碼。無需對URL進(jìn)行編碼,因為這是由表單完成的。然后URL編碼的查詢字符串被附加到ServletURL中,則整個URL提交完成。URL編碼的查詢字符串將根據(jù)用戶同可視部件之間的交互操作,將用戶所選的值同可視部件的名稱進(jìn)行配對。例如,考慮前面的HTML代碼段將用于顯示按鈕(標(biāo)記為AM和FM),如果用戶選擇FM按鈕,則查詢字符串將包含name=value的配對操作為broadcast=fm。因為在這種情況下,Servlet將響應(yīng)HTTP請求,因此Servlet應(yīng)基于HttpServlet類。Servlet應(yīng)根據(jù)提交給它的查詢字符串中的用戶信息使用的GET或POST方法,而相應(yīng)地使用doGet()或doPost()方法。
3.在<SERVLET>標(biāo)記中指定Servlet
當(dāng)使用<SERVLET>標(biāo)記來調(diào)用Servlet時,如同使用<FORM>標(biāo)記一樣,無需創(chuàng)建一個完整的HTML頁面。作為替代,Servlet的輸出僅是HTML頁面的一部分,且被動態(tài)嵌入到原始HTML頁面中的其它靜態(tài)文本中。所有這些都發(fā)生在服務(wù)器上,且發(fā)送給用戶的僅是結(jié)果HTML頁面。建議在Java服務(wù)器頁面(JSP)文件中使用<SERVLET>標(biāo)記。請參閱有關(guān)JSP技術(shù)
原始HTML頁面中包含<SERVLET>和</SERVLET>標(biāo)記。Servlet將在這兩個標(biāo)記中被調(diào)用,且Servlet的響應(yīng)將覆蓋這兩個標(biāo)記間的所有東西和標(biāo)記本身。如果用戶的瀏覽器可以看到HTML源文件,則用戶將看不到<SERVLET>和</SERVLET>標(biāo)記。要在DominoGoWebserver上使用該方法,請啟用服務(wù)器上的服務(wù)器端包括功能。部分啟用過程將會涉及到添加特殊文件類型SHTML。當(dāng)Web服務(wù)器接收到一個擴展名為SHTML的Web頁面請求時,它將搜索<SERVLET>和</SERVLET>標(biāo)記。對于所有支持的Web服務(wù)器,WebSphere應(yīng)用服務(wù)器將處理SERVLET標(biāo)記間的所有信息。下列HTML代碼段顯示了如何使用該技術(shù)。
<SERVLETNAME="myservlet"CODE="myservlet.class"CODEBASE="url"initparm1="value">
<PARAMNAME="parm1"VALUE="value">
</SERVLET>
使用NAME和CODE屬性帶來了使用上的靈活性??梢灾皇褂闷渲幸粋€屬性,也可以同時使用兩個屬性。NAME屬性指定了Servlet的名稱(使用WebSphere應(yīng)用服務(wù)器管理器配置的),或不帶.class擴展名的Servlet類名。CODE屬性指定了Servlet類名。使用WebSphere應(yīng)用服務(wù)器時,建議指定NAME和CODE,或當(dāng)NAME指定了Servlet名稱時,僅指定NAME。如果僅指定了CODE,則會創(chuàng)建一個NAME=CODE的Servlet實例。裝入的Servlet將假設(shè)Servlet名稱與NAME屬性中指定的名稱匹配。然后,其它SHTML文件可以成功地使用NAME屬性來指定Servlet的名稱,并調(diào)用已裝入的Servlet。NAME的值可以直接在要調(diào)用Servlet的URL中使用。如果NAME和CODE都存在,且NAME指定了一個現(xiàn)有Servlet,則通常使用NAME中指定的Servlet。由于Servlet創(chuàng)建了部分HTML文件,所以當(dāng)創(chuàng)建Servlet時,將可能會使用HttpServlet的一個子類,并優(yōu)先使用doGet()方法(因為GET方法是提供信息給Servlet的缺省方法)。另一個選項是優(yōu)先使用service()方法。另外,CODEBASE是可選的,它指定了裝入Servlet的遠(yuǎn)程系統(tǒng)的URL。請使用WebSphere應(yīng)用服務(wù)器管理器來從JAR文件配置遠(yuǎn)程Servlet裝入系統(tǒng)。
在上述的標(biāo)記示例中,initparm1是初始化參數(shù)名,value是該參數(shù)的值。可以指定多個“名稱-值”對的集合。利用ServletConfig對象(被傳遞到Servlet的init()方法中)的getInitParameterNames()和getInitParameter()方法來查找參數(shù)名和參數(shù)值的字符串?dāng)?shù)組。在示例中,parm1是參數(shù)名,并在初始化Servlet后被才被設(shè)置某個值。因為只能通過使用“請求”對象的方法來使用以<PARAM>標(biāo)記設(shè)置的參數(shù),所以服務(wù)器必須調(diào)用Servletservice()方法,以從用戶處傳遞請求。要獲得有關(guān)用戶的請求信息,請使用getParameterNames()、getParameter()和getParameterValues()方法。
初始化參數(shù)是持續(xù)的。假設(shè)一臺客戶機通過調(diào)用一個包含某些初始化參數(shù)的SHTML文件來調(diào)用Servlet。并假設(shè)第二臺客戶機通過調(diào)用第二個SHTML文件來調(diào)用同一個Servlet,且該SHTML中未指定任何初始化參數(shù)。那么第一次調(diào)用Servlet時所設(shè)置的初始化參數(shù)將一直可用,并且通過所有其它SHTML文件而調(diào)用的所有后繼Servlet都不會更改該參數(shù)。直到Servlet調(diào)用了destroy()方法后,才能重新設(shè)置初始化參數(shù)。例如,如果另一個SHTML文件指定了另一個不同的初始化參數(shù)值,雖然已此時已裝入了Servlet,但該值仍將被忽略。
4.在JSP文件中調(diào)用Servlet
可以從JavaServer頁面(JSP)文件中調(diào)用Servlet。請參閱JSP技術(shù)部分。
5.在ASP文件中調(diào)用Servlet
如果在MicrosoftInternetInformationServer(IIS)上有遺留的ASP文件,并且無法將ASP文件移植成JSP文件時,可用ASP文件來調(diào)用Servlet。在WebSphere應(yīng)用服務(wù)器中的ASP支持包括一個用于嵌入Servlet的ActiveX控制,下面介紹ActiveX控制AspToServlet的方法和屬性。
該方法說明如下:
(1)StringExecServletToString(StringservletName);執(zhí)行ServletName,并將其輸出返回到一個字符串中。
(2)ExecServlet(StringservletName);執(zhí)行ServletName,并將其輸出直接發(fā)送至HTML頁面。
(3)StringVarValue(StringvarName);獲得一預(yù)置變量值(其它格式)。
(4)VarValue(StringvarName,StringnewVal);設(shè)置變量值。變量占據(jù)的總大小應(yīng)小于0.5個千字節(jié)(Kbyte)。且僅對配置文件使用這些變量。
其屬性如下:
BooleanWriteHeaders;若該屬性為真,則Servlet提供的標(biāo)題被寫入用戶處。缺省值為假。
BooleanOnTest;若該屬性為真,服務(wù)器會將消息記錄到生成的HTML頁面中。缺省值為假。
下列ASP腳本示例是以MicrosoftVisualBasicScripting(VBScript)書寫的。
<%
'SmallsampleaspfiletoshowthecapabilitiesoftheservletsandtheASPGateWay...
%>
<H1>StartingtheASP->JavaServletdemo</H1>
<%
'CreateaServletgatewayobjectandinitializeit...
Setjavaasp=Server.Cre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品設(shè)計創(chuàng)新與技術(shù)應(yīng)用研究
- 兒童視力保護(hù)與近視預(yù)防
- 利用動畫技術(shù)讓你的更加生動活潑
- 會議主持人的形象與禮儀
- 公司治理結(jié)構(gòu)優(yōu)化與創(chuàng)新驅(qū)動發(fā)展
- 企業(yè)投資決策中的市場調(diào)研與分析
- 健康心理在教育工作中的應(yīng)用
- 中醫(yī)健康養(yǎng)生與家庭保健
- 從拖延癥到高效達(dá)人的轉(zhuǎn)變之路
- 產(chǎn)品研發(fā)流程與市場對接
- 新編高等數(shù)學(xué)(理工類)第8版高職PPT全套教學(xué)課件
- (全)電梯安全風(fēng)險管控清單
- 山東省高院量刑指導(dǎo)意見實施細(xì)則
- 教科版五年級科學(xué)下冊全套測試卷
- 環(huán)境規(guī)劃與管理第二章理論基礎(chǔ)
- TD-T 1040-2013 土地整治項目制圖規(guī)范
- 《數(shù)字影像設(shè)計與制作》統(tǒng)考復(fù)習(xí)題庫(匯總版)
- 成人有創(chuàng)機械通氣氣道內(nèi)吸引技術(shù)操作
- “雙減”下初中道德與法治分層作業(yè)設(shè)計研究 論文
- 發(fā)熱待查病例討論優(yōu)秀課件
- 第一章《原子結(jié)構(gòu)與性質(zhì)》測試題 高二化學(xué)人教版(2019)選擇性必修2
評論
0/150
提交評論