VisualAge for Java開(kāi)發(fā)Servlets
Servlets是Java編程環(huán)境中一個(gè)非常有生命力的新鮮事物,本文描述了Servlets,并介紹如何用VisualAge for Java迅速開(kāi)發(fā)Servlets。Servlets開(kāi)發(fā)中應(yīng)用到的VisualAgeforJava的關(guān)鍵技術(shù)是VisualAgeforJava的模擬多種虛擬機(jī)環(huán)境的能力,以及代碼增加編輯并連接到運(yùn)行中的程序中的能力。
背景
在WWW的初期,程序員們很快就意識(shí)到,通過(guò)使用公共網(wǎng)關(guān)界面(CGI),WWW可以成為一個(gè)引人注目的應(yīng)用開(kāi)發(fā)平臺(tái)。事實(shí)上,一個(gè)CGI程序就是把各種能力擴(kuò)展到Web服務(wù)器中的一個(gè)插入模塊。然而,CGI的最初設(shè)計(jì)要求為每一個(gè)請(qǐng)求服務(wù)創(chuàng)建一個(gè)單獨(dú)的進(jìn)程,從而增加了性能和資源的消耗。為改進(jìn)CGI的性能和可擴(kuò)展性,Web服務(wù)器廠商引進(jìn)了專有的APIs,例如網(wǎng)景公司的NSAPI、微軟公司的ISAPI和IBM的GWAPI,同時(shí),網(wǎng)景公司還為Navigator引人了一個(gè)Web瀏覽器插入API。這樣一來(lái),Web客戶機(jī)和服務(wù)器都可以通過(guò)插入而加以擴(kuò)展。不幸的是,這一插入要求使用專用的APIs,對(duì)于不同的操作系統(tǒng)版本也不同。
Sun公司推出的Java和定義的AppletAPI帶來(lái)了WWW的第二次進(jìn)步,AppletAPI為開(kāi)發(fā)者提供了一個(gè)擴(kuò)展Web瀏覽器的標(biāo)準(zhǔn)和與平臺(tái)無(wú)關(guān)的方式?,F(xiàn)在,Sun公司使Java成為建立N層企業(yè)級(jí)應(yīng)用軟件又推出了ServletAPI,為Web服務(wù)器帶來(lái)了同樣的優(yōu)點(diǎn)。熱心者可以通過(guò)訪問(wèn)http://java.sun.com了解Servlet,還可以從這里下載文檔和JavaServlet開(kāi)發(fā)工具包(JSDK)。在下面的討論中,我們將會(huì)提到JSDK1.0.1。
運(yùn)行Servlet
運(yùn)行Servlet的最好開(kāi)端是下載JSDK和運(yùn)行范例,并在Web服務(wù)器上配置Servlet。使用者可以用ServletRunner(srun)測(cè)試Servlet,ServletRunner是一個(gè)包含在JSDK中的小程序,是一個(gè)簡(jiǎn)化的Web服務(wù)器,與AppletViewer相似,只要Applet一連接上,它就能夠成為一個(gè)簡(jiǎn)化的Web瀏覽器。
假設(shè)使用者正在WindowsNT平臺(tái)上工作,并已安裝了JSDK1.1.x或JSDK1.0.1,打開(kāi)一個(gè)命令提示符,并轉(zhuǎn)到JSDK目錄,例如,E:\JSDK。在這個(gè)目錄中,bin子目錄中包含了ServletRunner,servlet子目錄中包含了servlet范例。然后進(jìn)入servlet子目錄,鍵入下面命令:
E:\JSDK\servlet>..\bin\srun-v
現(xiàn)在,就有了一個(gè)監(jiān)聽(tīng)8080端口的Web服務(wù)器,"-v"選項(xiàng)向命令提示符窗口產(chǎn)生詳細(xì)的輸出。下面,打開(kāi)任意一個(gè)Web瀏覽器,例如網(wǎng)景的Navigator,并打開(kāi)http://127.0.0.1:8080/servlet/HelloWorldServlet。ServletRunner加載了HelloWorldServlet類,為它構(gòu)造一個(gè)環(huán)境,調(diào)用其init()方法,然后調(diào)用它的service()方法,service()方法有一個(gè)請(qǐng)求參數(shù)和響應(yīng)參數(shù)。HelloWorldServlet對(duì)象簡(jiǎn)單地給響應(yīng)對(duì)象寫(xiě)一個(gè)HTML主頁(yè),該響應(yīng)對(duì)象被返回到Web瀏覽器并顯示。在第一次服務(wù)請(qǐng)求之后,該servlet保持激活狀態(tài),并處于待命狀態(tài),可以處理進(jìn)一步的請(qǐng)求。servlet的構(gòu)造必須能夠處理多個(gè)并發(fā)服務(wù)請(qǐng)求,因?yàn)槊恳徽?qǐng)求都是從自己的線程開(kāi)始的。當(dāng)ServletRunner終止時(shí),它調(diào)用servlet的destroy()方法。
在Servlet生命周期的最后階段,使用者必須停止并重新啟動(dòng)ServletRunner(或Web服務(wù)器),以得到一個(gè)更新的servlet類文件。在開(kāi)發(fā)過(guò)程中,使用者會(huì)經(jīng)常改變servlet代碼,所以使用ServletRunner可能會(huì)很單調(diào)乏味,特別是在servlet開(kāi)始運(yùn)行了一段時(shí)間以后,不得不調(diào)試一個(gè)問(wèn)題的時(shí)候。幸運(yùn)的是,來(lái)自IBM的VisualAgeforJava提供了一個(gè)效率更高的開(kāi)發(fā)Servlet軟件的方式。
要停止ServletRunner,在命令提示符窗口中鍵入Ctrl-C即可。
VisualAge for Java有兩個(gè)關(guān)鍵技術(shù),使開(kāi)發(fā)servlet非常方便:一個(gè)是多種虛擬機(jī)環(huán)境模擬,另一個(gè)是代碼增加編輯并連接到運(yùn)行中的程序。
JSDK包含了ServletRunner源代碼(srun.c),如果仔細(xì)考察一下,就會(huì)看到ServletRunner只是簡(jiǎn)單地運(yùn)行sun.servlet.http.HttpServer類。由于ServletRunner是一個(gè)Java程序,可以在VisualAgeforJava中把它當(dāng)作一個(gè)模擬虛擬機(jī)環(huán)境來(lái)運(yùn)行。啟動(dòng)VisualAgeforJava,并創(chuàng)建一個(gè)叫做JSDK的新項(xiàng)目。下面,解壓縮E:\JSDK\lib\classes.zip文件,輸出到一個(gè)temp目錄(或簡(jiǎn)單地拷貝到classes.jar),并把類文件(或jar文件)輸入到JSDK項(xiàng)目下。這時(shí)會(huì)產(chǎn)生幾個(gè)問(wèn)題,因?yàn)閏lasses.zip文件丟失了某些用于NetscapeWeb服務(wù)器支持的類。刪除sun.servlet.netscape軟件包來(lái)清除這些問(wèn)題,選擇sun.servlet.http.HttpServer類并運(yùn)行它(提供-v參數(shù)來(lái)把詳細(xì)結(jié)果輸出到控制臺(tái)窗口)。現(xiàn)在,開(kāi)發(fā)環(huán)境就是一個(gè)Web服務(wù)器!
下一步,對(duì)于范例sevlets,把這些源代碼從E:\JSDK\servlrts目錄輸入到JSDK項(xiàng)目,在Workbench窗口中的項(xiàng)目制表符中擴(kuò)展HelloWorldServlets類,并選擇doGetO方法。在源窗格中,在該行的起始處放入一個(gè)插入點(diǎn),內(nèi)容如下:out.printin(HelloWorld);插入一個(gè)斷點(diǎn),在Web瀏覽器中重新載入HelloWorldServletsURL。將命令改成:out.print("Hello VisualAge");然后,存儲(chǔ)這一變更。VisualAgeforJava僅僅編輯這個(gè)修改的類方法,并將其連接到運(yùn)行程序中。其重要之處在于:認(rèn)識(shí)到增加編輯只是事情的一半,真正的效率在于不必重新啟動(dòng)正在調(diào)試的程序,也不必重新創(chuàng)建引起問(wèn)題的程序執(zhí)行狀態(tài),正是這種程序執(zhí)行狀態(tài)產(chǎn)生了這些問(wèn)題,而使用者正在設(shè)法處理。
通過(guò)幾行程序代碼,檢測(cè)任何感興趣的變量,單擊Resume按鈕來(lái)完成服務(wù)請(qǐng)求,修改后的HTML頁(yè)將在Web瀏覽器中出現(xiàn)。
使用VisualAgeforJava,可以修改運(yùn)行中的servlet,因此沒(méi)有必要重復(fù)性地停止和啟動(dòng)Web服務(wù)器。此外,當(dāng)服務(wù)器運(yùn)行時(shí),使用者仍會(huì)擁有所有希望的開(kāi)發(fā)環(huán)境。
結(jié)論
Servlet是Web應(yīng)用開(kāi)發(fā)中的一個(gè)重要進(jìn)步。VisualAgeforJava通過(guò)ServletRunner對(duì)開(kāi)發(fā)Servlet、增加編輯和連接到運(yùn)行中的程序有很好的支持。將來(lái),IBM還會(huì)通過(guò)將Web連接技術(shù)擴(kuò)展到Smalltalk和C++對(duì)Java的連接,進(jìn)一步來(lái)加強(qiáng)對(duì)Servlet的支持。在IBM軟件技術(shù)的幫助下,使用者將能夠從HTMLJavaBean中使用VisualAgeforJavaCompositionEditor,進(jìn)而可視化地創(chuàng)建Servlets。
原文鏈接:http://www.cnblogs.com/cy163/archive/2009/02/08/1386134.html