調(diào)用Servlet的多種方法淺析
要調(diào)用Servlet或Web應(yīng)用程序,請使用下列任一種方法:由URL調(diào)用Servlet、在﹤FORM﹥標記中調(diào)用Servlet、在﹤SERVLET﹥標記中調(diào)用Servlet、在JSP文件中調(diào)用Servlet、在ASP文件中調(diào)用Servlet。
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,需打開http://your.server.name/servlet/hi。也可以指定Servlet和類使用同一名稱(HelloWorldServlet)。在這種情況下,將由http://your.server.name/servlet/HelloWorldServlet來調(diào)用Servlet的實例。
(2)指定Servlet別名:用WebSphere應(yīng)用服務(wù)器管理器來配置Servlet別名,該別名是用于調(diào)用Servlet的快捷URL??旖軺RL中不包括Servlet名稱。
2.在﹤FORM﹥標記中指定調(diào)用Servlet
可以在﹤FORM﹥標記中調(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ū)域的標記、按鈕和其它的提示符。)
- ﹤/FORM﹥
ACTION特性表明了用于調(diào)用Servlet的URL。關(guān)于METHOD的特性,如果用戶輸入的信息是通過GET方法向Servlet提交的,則Servlet必須優(yōu)先使用doGet()方法。反之,如果用戶輸入的信息是通過POST方法向Servlet提交的,則Servlet必須優(yōu)先使用doPost()方法。使用GET方法時,用戶提供的信息是查詢字符串表示的URL編碼。無需對URL進行編碼,因為這是由表單完成的。然后URL編碼的查詢字符串被附加到ServletURL中,則整個URL提交完成。URL編碼的查詢字符串將根據(jù)用戶同可視部件之間的交互操作,將用戶所選的值同可視部件的名稱進行配對。例如,考慮前面的HTML代碼段將用于顯示按鈕(標記為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﹥標記中指定調(diào)用Servlet
當(dāng)使用﹤SERVLET﹥標記來調(diào)用Servlet時,如同使用﹤FORM﹥標記一樣,無需創(chuàng)建一個完整的HTML頁面。作為替代,Servlet的輸出僅是HTML頁面的一部分,且被動態(tài)嵌入到原始HTML頁面中的其它靜態(tài)文本中。所有這些都發(fā)生在服務(wù)器上,且發(fā)送給用戶的僅是結(jié)果HTML頁面。建議在Java服務(wù)器頁面(JSP)文件中使用﹤SERVLET﹥標記。請參閱有關(guān)JSP技術(shù)
原始HTML頁面中包含﹤SERVLET﹥和﹤/SERVLET﹥標記。Servlet將在這兩個標記中被調(diào)用,且Servlet的響應(yīng)將覆蓋這兩個標記間的所有東西和標記本身。如果用戶的瀏覽器可以看到HTML源文件,則用戶將看不到﹤SERVLET﹥和﹤/SERVLET﹥標記。要在DominoGoWebserver上使用該方法,請啟用服務(wù)器上的服務(wù)器端包括功能。部分啟用過程將會涉及到添加特殊文件類型SHTML。當(dāng)Web服務(wù)器接收到一個擴展名為SHTML的Web頁面請求時,它將搜索﹤SERVLET﹥和﹤/SERVLET﹥標記。對于所有支持的Web服務(wù)器,WebSphere應(yīng)用服務(wù)器將處理SERVLET標記間的所有信息。下列HTML代碼段顯示了如何使用該技術(shù)。
- ﹤SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value"﹥
- ﹤PARAM NAME="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的遠程系統(tǒng)的URL。請使用WebSphere應(yīng)用服務(wù)器管理器來從JAR文件配置遠程Servlet裝入系統(tǒng)。
在上述的標記示例中,initparm1是初始化參數(shù)名,value是該參數(shù)的值??梢灾付ǘ鄠€“名稱-值”對的集合。利用ServletConfig對象(被傳遞到Servlet的init()方法中)的getInitParameterNames()和getInitParameter()方法來查找參數(shù)名和參數(shù)值的字符串?dāng)?shù)組。在示例中,parm1是參數(shù)名,并在初始化Servlet后被才被設(shè)置某個值。因為只能通過使用“請求”對象的方法來使用以﹤PARAM﹥標記設(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文件來執(zhí)行調(diào)用Servlet調(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
如果在Microsoft Internet Information Server(IIS)上有遺留的ASP文件,并且無法將ASP文件移植成JSP文件時,可用ASP文件來調(diào)用Servlet。在WebSphere應(yīng)用服務(wù)器中的ASP支持包括一個用于嵌入Servlet的ActiveX控制,下面介紹ActiveX控制AspToServlet的方法和屬性。
該方法說明如下:
(1)String ExecServletToString(String servletName);執(zhí)行ServletName,并將其輸出返回到一個字符串中。
(2)ExecServlet(String servletName);執(zhí)行ServletName,并將其輸出直接發(fā)送至HTML頁面。
(3)String VarValue(String varName);獲得一預(yù)置變量值(其它格式)。
(4)VarValue(String varName, String newVal);設(shè)置變量值。變量占據(jù)的總大小應(yīng)小于0.5個千字節(jié)(Kbyte)。且僅對配置文件使用這些變量。
其屬性如下:
◆Boolean WriteHeaders;若該屬性為真,則Servlet提供的標題被寫入用戶處。缺省值為假。
◆Boolean OnTest;若該屬性為真,服務(wù)器會將消息記錄到生成的HTML頁面中。缺省值為假。
下列ASP調(diào)用Servlet腳本示例是以Microsoft Visual Basic Scripting(VBScript)書寫的。
- ﹤%
- ' Small sample asp file to show the capabilities of the servlets and the ASP GateWay ...
- %﹥
- ﹤H1﹥ Starting the ASP-﹥Java Servlet demo﹤/H1﹥
- ﹤%
- ' Create a Servlet gateway object and initialize it ...
- Set javaasp = Server.CreateObject("AspToServlet.AspToServlet")
- ' Setting these properties is only for the sake of demo.
- ' These are the default values ...
- javaasp.OnTest = False
- javaasp.WriteHeaders = False
- ' Add several variables ...
- javaasp.VarValue("gal") = "lag"
- javaasp.VarValue("pico")= "ocip"
- javaasp.VarValue("tal") = "lat"
- javaasp.VarValue("paz") = "zap"
- javaasp.VarValue("variable name with spaces") = "variable value with spaces"
- %﹥
- ﹤BR﹥
- Lets check the variables
- ﹤%
- Response.Write("variable gal = ")
- Response.Write(javaasp.VarValue("gal"))
- %﹥
- ﹤BR﹥
- ﹤%
- Response.Write("variable picopico = " & javaasp.VarValue("pico"))
- %﹥
- ﹤BR﹥
- ﹤HR﹥
- ﹤%
- galout = javaasp.ExecServletToString("SnoopServlet")
- If javaasp.WriteHeaders = True Then
- %﹥
- Headers were written ﹤%
- Else
- %﹥
- Headers were not written ﹤%
- End If
- Response.Write(galout)
- %﹥
- ﹤H1﹥ The End ...﹤/H1﹥
調(diào)用Servlet的方法也是根據(jù)程序員自身的要求來,那么以上的這些方法希望對你在工作中要實現(xiàn)調(diào)用Servlet有幫助。
【編輯推薦】