程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 調用 Servlet

調用 Servlet

編輯:關於JSP

要調用 Servlet 或 Web 應用程序,請使用下列任一種方法:由 URL 調用、在 <FORM> 標記中調用、在 <SERVLET>標記中調用、在 JSP 文件中調用、在 ASP 文件中調用。

1. 由 URL 調用 Servlet
這裡有兩種用 Servlet 的 URL 從浏覽器中調用該 Servlet 的方法:

(1) 指定 Servlet 名稱:當用 WebSphere應用服務器 管理器來將一個 Servlet 實例添加(注冊)到服務器配置中時,必須指定"Servlet 名稱"參數的值。例如,可以指定將 hi 作為 HelloWorldServlet 的 Servlet 名稱。要調用該 Servlet,需打開 http://your.server.name/servlet/hi。也可以指定 Servlet 和類使用同一名稱(HelloWorldServlet)。在這種情況下,將由 http://your.server.name/servlet/HelloWorldServlet 來調用 Servlet 的實例。

(2) 指定 Servlet 別名:用 WebSphere應用服務器 管理器來配置 Servlet 別名,該別名是用於調用 Servlet 的快捷 URL。快捷 URL 中不包括 Servlet 名稱。

2. 在 <FORM> 標記中指定 Servlet
可以在 <FORM> 標記中調用 Servlet。HTML 格式使用戶能在 Web 頁面(即從浏覽器)上輸入數據,並向 Servlet 提交數據。例如:
<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>
(用於放置文本輸入區域的標記、按鈕和其它的提示符。)
</FORM>
ACTION 特性表明了用於調用 Servlet 的 URL。關於METHOD 的特性,如果用戶輸入的信息是通過 GET 方法向 Servlet 提交的,則 Servlet 必須優先使用 doGet() 方法。反之,如果用戶輸入的信息是通過 POST 方法向 Servlet 提交的,則 Servlet 必須優先使用 doPost() 方法。使用 GET 方法時,用戶提供的信息是查詢字符串表示的 URL 編碼。無需對 URL 進行編碼,因為這是由表單完成的。然後 URL 編碼的查詢字符串被附加到 Servlet URL 中,則整個 URL 提交完成。URL 編碼的查詢字符串將根據用戶同可視部件之間的交互操作,將用戶所選的值同可視部件的名稱進行配對。例如,考慮前面的 HTML 代碼段將用於顯示按鈕(標記為 AM 和 FM),如果用戶選擇 FM 按鈕,則查詢字符串將包含 name=value 的配對操作為broadcast=fm。因為在這種情況下,Servlet 將響應 HTTP 請求,因此 Servlet 應基於 HttpServlet 類。Servlet 應根據提交給它的查詢字符串中的用戶信息使用的 GET 或 POST 方法,而相應地使用 doGet() 或 doPost() 方法。

3.在 <SERVLET> 標記中指定 Servlet
當使用 <SERVLET> 標記來調用 Servlet 時,如同使用 <FORM> 標記一樣,無需創建一個完整的 HTML 頁面。作為替代,Servlet 的輸出僅是 HTML 頁面的一部分,且被動態嵌入到原始 HTML 頁面中的其它靜態文本中。所有這些都發生在服務器上,且發送給用戶的僅是結果 HTML 頁面。建議在 Java 服務器頁面(JSP)文件中使用 <SERVLET> 標記。請參閱有關 JSP 技術
原始 HTML 頁面中包含 <SERVLET> 和 </SERVLET> 標記。 Servlet 將在這兩個標記中被調用,且 Servlet 的響應將覆蓋這兩個標記間的所有東西和標記本身。如果用戶的浏覽器可以看到 HTML 源文件,則用戶將看不到 <SERVLET> 和 </SERVLET> 標記。要在 Domino Go Webserver 上使用該方法,請啟用服務器上的服務器端包括功能。部分啟用過程將會涉及到添加特殊文件類型 SHTML。當 Web 服務器接收到一個擴展名為 SHTML 的 Web 頁面請求時,它將搜索 <SERVLET> 和 </SERVLET> 標記。對於所有支持的 Web 服務器,WebSphere應用服務器 將處理 SERVLET 標記間的所有信息。下列 HTML 代碼段顯示了如何使用該技術。
<SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value">
<PARAM NAME="parm1" VALUE="value">
</SERVLET>
使用 NAME 和 CODE 屬性帶來了使用上的靈活性。可以只使用其中一個屬性,也可以同時使用兩個屬性。 NAME 屬性指定了 Servlet 的名稱(使用 WebSphere應用服務器 管理器配置的),或不帶 .class 擴展名的 Servlet 類名。CODE 屬性指定了 Servlet 類名。使用 WebSphere應用服務器 時,建議指定 NAME 和 CODE,或當 NAME 指定了 Servlet 名稱時,僅指定 NAME。如果僅指定了 CODE,則會創建一個 NAME=CODE 的 Servlet 實例。裝入的 Servlet 將假設 Servlet 名稱與 NAME 屬性中指定的名稱匹配。然後,其它 SHTML 文件可以成功地使用 NAME 屬性來指定 Servlet 的名稱,並調用已裝入的 Servlet。NAME 的值可以直接在要調用 Servlet 的 URL 中使用。如果 NAME 和 CODE 都存在,且 NAME 指定了一個現有 Servlet,則通常使用 NAME 中指定的 Servlet。由於 Servlet 創建了部分 HTML 文件,所以當創建 Servlet 時,將可能會使用 HttpServlet 的一個子類,並優先使用 doGet() 方法(因為 GET 方法是提供信息給 Servlet 的缺省方法)。另一個選項是優先使用 service() 方法。另外, CODEBASE 是可選的,它指定了裝入 Servlet 的遠程系統的 URL。請使用 WebSphere應用服務器 管理器來從 JAR 文件配置遠程 Servlet 裝入系統。
在上述的標記示例中,initparm1 是初始化參數名,value 是該參數的值。可以指定多個"名稱-值"對的集合。利用 ServletConfig 對象(被傳遞到 Servlet 的 init() 方法中)的 getInitParameterNames() 和 getInitParameter() 方法來查找參數名和參數值的字符串數組。在示例中,parm1 是參數名,並在初始化 Servlet 後被才被設置某個值。因為只能通過使用"請求"對象的方法來使用以 <PARAM> 標記設置的參數,所以服務器必須調用 Servlet service() 方法,以從用戶處傳遞請求。要獲得有關用戶的請求信息,請使用 getParameterNames()、getParameter() 和 getParameterValues() 方法。
初始化參數是持續的。假設一台客戶機通過調用一個包含某些初始化參數的 SHTML 文件來調用 Servlet。並假設第二台客戶機通過調用第二個 SHTML 文件來調用同一個 Servlet,且該 SHTML 中未指定任何初始化參數。那麼第一次調用 Servlet 時所設置的初始化參數將一直可用,並且通過所有其它 SHTML 文件而調用的所有後繼 Servlet 都不會更改該參數。直到 Servlet 調用了 destroy() 方法後,才能重新設置初始化參數。例如,如果另一個 SHTML 文件指定了另一個不同的初始化參數值,雖然已此時已裝入了 Servlet,但該值仍將被忽略。

4.在 JSP 文件中調用 Servlet
可以從 JavaServer 頁面(JSP)文件中調用 Servlet。請參閱JSP技術部分。

5.在 ASP 文件中調用 Servlet
如果在 Microsoft Internet Information Server(IIS)上有遺留的 ASP 文件,並且無法將 ASP 文件移植成 JSP 文件時,可用 ASP 文件來調用 Servlet。在 WebSphere應用服務器 中的 ASP 支持包括一個用於嵌入 Servlet 的 ActiveX 控制,下面介紹ActiveX 控制AspToServlet 的方法和屬性。
該方法說明如下:

(1) String ExecServletToString(String servletName);執行 ServletName,並將其輸出返回到一個字符串中。

(2) ExecServlet(String servletName);執行 ServletName,並將其輸出直接發送至 HTML 頁面。

(3) String VarValue(String varName);獲得一預置變量值(其它格式)。

(4) VarValue(String varName, String newVal);設置變量值。變量占據的總大小應小於 0.5 個千字
節(Kbyte)。且僅對配置文件使用這些變量。
其屬性如下:
= Boolean WriteHeaders;若該屬性為真,則 Servlet 提供的標題被寫入用戶處。缺省值為假。
= Boolean OnTest;若該屬性為真,服務器會將消息記錄到生成的 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>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved