直播中
1. 由 URL 調(diào)用 Servlet
這里有兩種用 Servlet 的 URL 從瀏覽器中調(diào)用該 Servlet 的方法:
(1) 指定 Servlet 名稱:當(dāng)用 WebSphere應(yīng)用服務(wù)器 管理器來將一個(gè) Servlet 實(shí)例添加(注冊(cè))到服務(wù)器配置中時(shí),必須指定"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 的實(shí)例。
(2) 指定 Servlet 別名:用 WebSphere應(yīng)用服務(wù)器 管理器來配置 Servlet 別名,該別名是用于調(diào)用 Servlet 的快捷 URL??旖?URL 中不包括 Servlet 名稱。
2. 在 <FORM> 標(biāo)記中指定 Servlet
可以在 <FORM> 標(biāo)記中調(diào)用 Servlet。HTML 格式使用戶能在 Web 頁面(即從瀏覽器)上輸入數(shù)據(jù),并向 Servlet 提交數(shù)據(jù)。例如:
<FORM METHOD="GET" ACTION="/servlet/myservlet">
<OL>
<INPUT TYPE="radio" NAME="broadcast" VALUE="am">AM<BR>
<INPUT TYPE="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 方法時(shí),用戶提供的信息是查詢字符串表示的 URL 編碼。無需對(duì) URL 進(jìn)行編碼,因?yàn)檫@是由表單完成的。然后 URL 編碼的查詢字符串被附加到 Servlet URL 中,則整個(gè) URL 提交完成。URL 編碼的查詢字符串將根據(jù)用戶同可視部件之間的交互操作,將用戶所選的值同可視部件的名稱進(jìn)行配對(duì)。例如,考慮前面的 HTML 代碼段將用于顯示按鈕(標(biāo)記為 AM 和 FM),如果用戶選擇 FM 按鈕,則查詢字符串將包含 name=value 的配對(duì)操作為broadcast=fm。因?yàn)樵谶@種情況下,Servlet 將響應(yīng) HTTP 請(qǐng)求,因此 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 時(shí),如同使用 <FORM> 標(biāo)記一樣,無需創(chuàng)建一個(gè)完整的 HTML 頁面。作為替代,Servlet 的輸出僅是 HTML 頁面的一部分,且被動(dòng)態(tài)嵌入到原始 HTML 頁面中的其它靜態(tài)文本中。所有這些都發(fā)生在服務(wù)器上,且發(fā)送給用戶的僅是結(jié)果 HTML 頁面。建議在 Java 服務(wù)器頁面(JSP)文件中使用 <SERVLET> 標(biāo)記。請(qǐng)參閱有關(guān) JSP 技術(shù)
原始 HTML 頁面中包含 <SERVLET> 和 </SERVLET> 標(biāo)記。 Servlet 將在這兩個(gè)標(biāo)記中被調(diào)用,且 Servlet 的響應(yīng)將覆蓋這兩個(gè)標(biāo)記間的所有東西和標(biāo)記本身。如果用戶的瀏覽器可以看到 HTML 源文件,則用戶將看不到 <SERVLET> 和 </SERVLET> 標(biāo)記。要在 Domino Go Webserver 上使用該方法,請(qǐng)啟用服務(wù)器上的服務(wù)器端包括功能。部分啟用過程將會(huì)涉及到添加特殊文件類型 SHTML。當(dāng) Web 服務(wù)器接收到一個(gè)擴(kuò)展名為 SHTML 的 Web 頁面請(qǐng)求時(shí),它將搜索 <SERVLET> 和 </SERVLET> 標(biāo)記。對(duì)于所有支持的 Web 服務(wù)器,WebSphere應(yīng)用服務(wù)器 將處理 SERVLET 標(biāo)記間的所有信息。下列 HTML 代碼段顯示了如何使用該技術(shù)。
<SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value">
<PARAM NAME="parm1" VALUE="value">
</SERVLET>
使用 NAME 和 CODE 屬性帶來了使用上的靈活性??梢灾皇褂闷渲幸粋€(gè)屬性,也可以同時(shí)使用兩個(gè)屬性。 NAME 屬性指定了 Servlet 的名稱(使用 WebSphere應(yīng)用服務(wù)器 管理器配置的),或不帶 .class 擴(kuò)展名的 Servlet 類名。CODE 屬性指定了 Servlet 類名。使用 WebSphere應(yīng)用服務(wù)器 時(shí),建議指定 NAME 和 CODE,或當(dāng) NAME 指定了 Servlet 名稱時(shí),僅指定 NAME。如果僅指定了 CODE,則會(huì)創(chuàng)建一個(gè) NAME=CODE 的 Servlet 實(shí)例。裝入的 Servlet 將假設(shè) Servlet 名稱與 NAME 屬性中指定的名稱匹配。然后,其它 SHTML 文件可以成功地使用 NAME 屬性來指定 Servlet 的名稱,并調(diào)用已裝入的 Servlet。NAME 的值可以直接在要調(diào)用 Servlet 的 URL 中使用。如果 NAME 和 CODE 都存在,且 NAME 指定了一個(gè)現(xiàn)有 Servlet,則通常使用 NAME 中指定的 Servlet。由于 Servlet 創(chuàng)建了部分 HTML 文件,所以當(dāng)創(chuàng)建 Servlet 時(shí),將可能會(huì)使用 HttpServlet 的一個(gè)子類,并優(yōu)先使用 doGet() 方法(因?yàn)?GET 方法是提供信息給 Servlet 的缺省方法)。另一個(gè)選項(xiàng)是優(yōu)先使用 service() 方法。另外, CODEBASE 是可選的,它指定了裝入 Servlet 的遠(yuǎn)程系統(tǒng)的 URL。請(qǐng)使用 WebSphere應(yīng)用服務(wù)器 管理器來從 JAR 文件配置遠(yuǎn)程 Servlet 裝入系統(tǒng)。
在上述的標(biāo)記示例中,initparm1 是初始化參數(shù)名,value 是該參數(shù)的值。可以指定多個(gè)"名稱-值"對(duì)的集合。利用 ServletConfig 對(duì)象(被傳遞到 Servlet 的 init() 方法中)的 getInitParameterNames() 和 getInitParameter() 方法來查找參數(shù)名和參數(shù)值的字符串?dāng)?shù)組。在示例中,parm1 是參數(shù)名,并在初始化 Servlet 后被才被設(shè)置某個(gè)值。因?yàn)橹荒芡ㄟ^使用"請(qǐng)求"對(duì)象的方法來使用以 <PARAM> 標(biāo)記設(shè)置的參數(shù),所以服務(wù)器必須調(diào)用 Servlet service() 方法,以從用戶處傳遞請(qǐng)求。要獲得有關(guān)用戶的請(qǐng)求信息,請(qǐng)使用 getParameterNames()、getParameter() 和 getParameterValues() 方法。
初始化參數(shù)是持續(xù)的。假設(shè)一臺(tái)客戶機(jī)通過調(diào)用一個(gè)包含某些初始化參數(shù)的 SHTML 文件來調(diào)用 Servlet。并假設(shè)第二臺(tái)客戶機(jī)通過調(diào)用第二個(gè) SHTML 文件來調(diào)用同一個(gè) Servlet,且該 SHTML 中未指定任何初始化參數(shù)。那么第一次調(diào)用 Servlet 時(shí)所設(shè)置的初始化參數(shù)將一直可用,并且通過所有其它 SHTML 文件而調(diào)用的所有后繼 Servlet 都不會(huì)更改該參數(shù)。直到 Servlet 調(diào)用了 destroy() 方法后,才能重新設(shè)置初始化參數(shù)。例如,如果另一個(gè) SHTML 文件指定了另一個(gè)不同的初始化參數(shù)值,雖然已此時(shí)已裝入了 Servlet,但該值仍將被忽略。
4.在 JSP 文件中調(diào)用 Servlet
可以從 JavaServer 頁面(JSP)文件中調(diào)用 Servlet。請(qǐng)參閱JSP技術(shù)部分。
5.在 ASP 文件中調(diào)用 Servlet
如果在 Microsoft Internet Information Server(IIS)上有遺留的 ASP 文件,并且無法將 ASP 文件移植成 JSP 文件時(shí),可用 ASP 文件來調(diào)用 Servlet。在 WebSphere應(yīng)用服務(wù)器 中的 ASP 支持包括一個(gè)用于嵌入 Servlet 的 ActiveX 控制,下面介紹ActiveX 控制AspToServlet 的方法和屬性。
該方法說明如下:
(1) String ExecServletToString(String servletName);執(zhí)行 ServletName,并將其輸出返回到一個(gè)字符串中。
(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 個(gè)千字
節(jié)(Kbyte)。且僅對(duì)配置文件使用這些變量。
其屬性如下:
= Boolean WriteHeaders;若該屬性為真,則 Servlet 提供的標(biāo)題被寫入用戶處。缺省值為假。
= Boolean OnTest;若該屬性為真,服務(wù)器會(huì)將消息記錄到生成的 HTML 頁面中。缺省值為假。
下列ASP 腳本示例是以 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 pico = " & 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>