<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    Java Servlet技術(shù)

    Java Servlet技術(shù)
    4.1 Servlet簡介
    1.Servlet 是什么?
    Servlet是使用Java Servlet 應(yīng)用程序設(shè)計(jì)接口(API)及相關(guān)類和方法的 Java 程序。除了 Java Servlet API,Servlet 還可以使用用以擴(kuò)展和添加到 API 的 Java 類軟件包。Servlet 在啟用 Java 的 Web 服務(wù)器上或應(yīng)用服務(wù)器上運(yùn)行并擴(kuò)展了該服務(wù)器的能力。Java servlet對于Web服務(wù)器就好象Java applet對于Web瀏覽器。Servlet裝入Web服務(wù)器并在Web服務(wù)器內(nèi)執(zhí)行,而applet裝入Web瀏覽器并在Web瀏覽器內(nèi)執(zhí)行。Java Servlet API 定義了一個(gè)servlet 和Java使能的服務(wù)器之間的一個(gè)標(biāo)準(zhǔn)接口,這使得Servlets具有跨服務(wù)器平臺(tái)的特性。
    Servlet 通過創(chuàng)建一個(gè)框架來擴(kuò)展服務(wù)器的能力,以提供在 Web 上進(jìn)行請求和響應(yīng)服務(wù)。當(dāng)客戶機(jī)發(fā)送請求至服務(wù)器時(shí),服務(wù)器可以將請求信息發(fā)送給 Servlet,并讓 Servlet 建立起服務(wù)器返回給客戶機(jī)的響應(yīng)。 當(dāng)啟動(dòng) Web 服務(wù)器或客戶機(jī)第一次請求服務(wù)時(shí),可以自動(dòng)裝入 Servlet。裝入后, Servlet 繼續(xù)運(yùn)行直到其它客戶機(jī)發(fā)出請求。Servlet 的功能涉及范圍很廣。例如,Servlet 可完成如下功能:
    (1) 創(chuàng)建并返回一個(gè)包含基于客戶請求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的 HTML頁面。
    (2) 創(chuàng)建可嵌入到現(xiàn)有 HTML 頁面中的一部分 HTML 頁面(HTML 片段)。
    (3) 與其它服務(wù)器資源(包括數(shù)據(jù)庫和基于 Java 的應(yīng)用程序)進(jìn)行通信。
    (4) 用多個(gè)客戶機(jī)處理連接,接收多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上。例如,Servlet 可以是多參與者的游戲服務(wù)器。
    (5) 當(dāng)允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務(wù)器至applet的新連接,并將該連
    接保持在打開狀態(tài)。當(dāng)允許客戶機(jī)和服務(wù)器簡單、高效地執(zhí)行會(huì)話的情況下,applet也可以啟動(dòng)客戶瀏覽器和服務(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)存時(shí),并在終止或重新裝入 Servlet 時(shí)結(jié)束。
    (1) 初始化
    在下列時(shí)刻裝入 Servlet:
     如果已配置自動(dòng)裝入選項(xiàng),則在啟動(dòng)服務(wù)器時(shí)自動(dòng)裝入
     在服務(wù)器啟動(dòng)后,客戶機(jī)首次向 Servlet 發(fā)出請求時(shí)
     重新裝入 Servlet 時(shí)裝入 Servlet 后,服務(wù)器創(chuàng)建一個(gè) Servlet 實(shí)例并且調(diào)用 Servlet 的 init() 方法。在初始化階段,Servlet 初始化參數(shù)被傳遞給 Servlet 配置對象。
    (2) 請求處理
    對于到達(dá)服務(wù)器的客戶機(jī)請求,服務(wù)器創(chuàng)建特定于請求的一個(gè)“請求”對象和一個(gè)“響應(yīng)”對象。服務(wù)器調(diào)用 Servlet 的 service() 方法,該方法用于傳遞“請求”和“響應(yīng)”對象。service() 方法從“請求”對象獲得請求信息、處理該請求并用“響應(yīng)”對象的方法以將響應(yīng)傳回客戶機(jī)。service() 方法可以調(diào)用其它方法來處理請求,例如 doGet()、doPost() 或其它的方法。
    (3) 終止
    當(dāng)服務(wù)器不再需要 Servlet, 或重新裝入 Servlet 的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用 Servlet 的 destroy() 方法。
    3. Java Servlet API
    Java Servlet 開發(fā)工具(JSDK)提供了多個(gè)軟件包,在編寫 Servlet 時(shí)需要用到這些軟件包。其中包括兩個(gè)用于所有 Servlet 的基本軟件包:javax.servlet 和 javax.servlet.http??蓮膕un公司的Web站點(diǎn)下載 Java Servlet 開發(fā)工具。 下面主要介紹javax.servlet.http提供的HTTP Servlet應(yīng)用編程接口。
    HTTP Servlet 使用一個(gè) HTML 表格來發(fā)送和接收數(shù)據(jù)。要?jiǎng)?chuàng)建一個(gè) HTTP Servlet,請擴(kuò)展 HttpServlet 類, 該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個(gè)子類。 HTML 表單是由 <FORM> 和 </FORM> 標(biāo)記定義的。表單中典型地包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。當(dāng)提交信息時(shí),它們還指定服務(wù)器應(yīng)執(zhí)行哪一 個(gè)Servlet(或其它的程序)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。
    (1) init() 方法
    在 Servlet 的生命期中,僅執(zhí)行一次 init() 方法。它是在服務(wù)器裝入 Servlet 時(shí)執(zhí)行的。 可以配置服務(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet 時(shí)裝入 Servlet。 無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行 init() 。
    缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務(wù)器端資源。 例如,可能編寫一個(gè)定制 init() 來只用于一次裝入 GIF 圖像,改進(jìn) Servlet 返回 GIF 圖像和含有多個(gè)客戶機(jī)請求的性能。另一個(gè)示例是初始化數(shù)據(jù)庫連接。缺省的 init() 方法設(shè)置了 Servlet 的初始化參數(shù),并用它的 ServletConfig 對象參數(shù)來啟動(dòng)配置, 因此所有覆蓋 init() 方法的 Servlet 應(yīng)調(diào)用 super.init() 以確保仍然執(zhí)行這些任務(wù)。在調(diào)用 service() 方法之前,應(yīng)確保已完成了 init() 方法。
    (2) service() 方法
    service() 方法是 Servlet 的核心。每當(dāng)一個(gè)客戶請求一個(gè)HttpServlet 對象,該對象的service() 方法就要被調(diào)用,而且傳遞給這個(gè)方法一個(gè)“請求”(ServletRequest)對象和一個(gè)“響應(yīng)”(ServletResponse)對象作為參數(shù)。 在 HttpServlet 中已存在 service() 方法。缺省的服務(wù)功能是調(diào)用與 HTTP 請求的方法相應(yīng)的 do 功能。例如, 如果 HTTP 請求方法為 GET,則缺省情況下就調(diào)用 doGet() 。Servlet 應(yīng)該為 Servlet 支持的 HTTP 方法覆蓋 do 功能。因?yàn)?HttpServlet.service() 方法會(huì)檢查請求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒?,不必要覆蓋 service() 方法。只需覆蓋相應(yīng)的 do 方法就可以了。
     當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP POST請求時(shí),doPost()方法被調(diào)用。與POST請求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的HTTP 請求從瀏覽器發(fā)送到服務(wù)器。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doPost()方法。
     當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP GET請求或直接請求一個(gè)URL時(shí),doGet()方法被調(diào)用。與GET請求相關(guān)的參數(shù)添加到URL的后面,并與這個(gè)請求一起發(fā)送。當(dāng)不會(huì)修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doGet()方法。
    Servlet的響應(yīng)可以是下列幾種類型:
    一個(gè)輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如text/HTML)進(jìn)行解釋。
    一個(gè)HTTP錯(cuò)誤響應(yīng), 重定向到另一個(gè)URL、servlet、JSP。
    (3) destroy() 方法
    destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet 時(shí)執(zhí)行該方法。典型的,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務(wù)器端資源。例如,如果 Servlet 在運(yùn)行時(shí)會(huì)累計(jì)統(tǒng)計(jì)數(shù)據(jù),則可以編寫一個(gè) destroy() 方法,該方法用于在未裝入 Servlet 時(shí)將統(tǒng)計(jì)數(shù)字保存在文件中。另一個(gè)示例是關(guān)閉數(shù)據(jù)庫連接。
    當(dāng)服務(wù)器卸裝 Servlet 時(shí),將在所有 service() 方法調(diào)用完成后,或在指定的時(shí)間間隔過后調(diào)用 destroy() 方法。一個(gè)Servlet 在運(yùn)行service() 方法時(shí)可能會(huì)產(chǎn)生其它的線程,因此請確認(rèn)在調(diào)用 destroy() 方法時(shí),這些線程已終止或完成。
    (4) GetServletConfig()方法
    GetServletConfig()方法返回一個(gè) ServletConfig 對象,該對象用來返回初始化參數(shù)和ServletContext。ServletContext 接口提供有關(guān)servlet 的環(huán)境信息。
    (5) GetServletInfo()方法
    GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)servlet 的信息,如作者、版本、版權(quán)。
    當(dāng)服務(wù)器調(diào)用sevlet 的Service()、doGet()和doPost()這三個(gè)方法時(shí),均需要 “請求”和“響應(yīng)”對象作為參數(shù)。“請求”對象提供有關(guān)請求的信息,而“響應(yīng)”對象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的一個(gè)通信途徑。javax.servlet 軟件包中的相關(guān)類為ServletResponse和ServletRequest,而javax.servlet.http 軟件包中的相關(guān)類為HttpServletRequest 和 HttpServletResponse。Servlet 通過這些對象與服務(wù)器通信并最終與客戶機(jī)通信。Servlet 能通過調(diào)用“請求”對象的方法獲知客戶機(jī)環(huán)境,服務(wù)器環(huán)境的信息和所有由客戶機(jī)提供的信息。Servlet 可以調(diào)用“響應(yīng)”對象的方法發(fā)送響應(yīng),該響應(yīng)是準(zhǔn)備發(fā)回客戶機(jī)的。
    4.2 創(chuàng)建HTTP Servlet
    創(chuàng)建一個(gè) HTTP Servlet,通常涉及下列四個(gè)步驟:
    1. 擴(kuò)展 HttpServlet 抽象類。
    2. 重載適當(dāng)?shù)姆椒?。]如覆蓋(或稱為重寫)doGet() 或doPost()方法。
    3. 如果有 HTTP 請求信息的話,獲取該信息。用 HttpServletRequest 對象來檢索 HTML 表格所
    提交的數(shù)據(jù)或 URL 上的查詢字符串。“請求”對象含有特定的方法以檢索客戶機(jī)提供的信息,有3個(gè)可用的方法:
     getParameterNames(),
     getParameter(),
     getParameterValues()。
    4. 生成 HTTP 響應(yīng)。HttpServletResponse 對象生成響應(yīng),并將它返回到發(fā)出請求的客戶機(jī)上。它
    的方法允許設(shè)置“請求” 標(biāo)題和“響應(yīng)”主體。“響應(yīng)”對象還含有 getWriter() 方法以返回一個(gè) PrintWriter 對象。使用 PrintWriter 的 print() 和 println() 方法以編寫 Servlet 響應(yīng)來返回給客戶機(jī)?;蛘撸苯邮褂胦ut對象輸出有關(guān)HTML文檔內(nèi)容。
    一個(gè)servlet樣例(ServletSample.java)如下:
    import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class ServletSample extends HttpServlet { // 第一步: 擴(kuò)展 HttpServlet 抽象類。

    public void doGet (HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { // 第二步:重寫doGet()方法

    String myName = ""; // 第三步:獲取HTTP 請求信息
    java.util.Enumeration keys = request.getParameterNames();
    while (keys.hasMoreElements());
    {
    key = (String) keys.nextElement();
    if (key.equalsIgnoreCase("myName"))
    myName = request.getParameter(key);
    }
    if (myName == "")
    myName = "Hello";
    // 第四步:生成 HTTP 響應(yīng)。
    response.setContentType("text/html");
    response.setHeader("Pragma", "No-cache");
    response.setDateHeader("Expires", 0);
    response.setHeader("Cache-Control", "no-cache");

    out.println("<head><title>Just a basic servlet</title></head>");
    out.println("<body>");
    out.println("<h1>Just a basic servlet</h1>");
    out.println ("<p>" + myName + ", this is a very basic servlet that writes an HTML
    page.");
    out.println ("<p>For instructions on running those samples on your WebSphere應(yīng)用服務(wù)器, "+
    "open the page:");
    out.println("<pre>http://<em>your.server.name</em>/IBMWebAs/samples/index.aspl</pre>");
    out.println("where <em>your.server.name</em> is the hostname of your WebSphere應(yīng)用服
    務(wù)器.");
    out.println("</body></html>");
    out.flush();
    }
    }
    上述ServletSample類擴(kuò)展 HttpServlet 抽象類、重寫doGet()方法。在重寫的doGet()方法中,獲取HTTP 請求中的一個(gè)任選的參數(shù)(myName),該參數(shù)可作為調(diào)用的 URL 上的查詢參數(shù)傳遞到 Servlet。使用示例如下:http://your.server.name/servlet/ServletSample?myname=Michael
    4.3 調(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ù)器 管理器來將一個(gè) Servlet 實(shí)例添加(注冊)到服務(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 編碼。無需對 URL 進(jìn)行編碼,因?yàn)檫@是由表單完成的。然后 URL 編碼的查詢字符串被附加到 Servlet URL 中,則整個(gè) URL 提交完成。URL 編碼的查詢字符串將根據(jù)用戶同可視部件之間的交互操作,將用戶所選的值同可視部件的名稱進(jìn)行配對。例如,考慮前面的 HTML 代碼段將用于顯示按鈕(標(biāo)記為 AM 和 FM),如果用戶選擇 FM 按鈕,則查詢字符串將包含 name=value 的配對操作為broadcast=fm。因?yàn)樵谶@種情況下,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 時(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)記。請參閱有關(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 上使用該方法,請啟用服務(wù)器上的服務(wù)器端包括功能。部分啟用過程將會(huì)涉及到添加特殊文件類型 SHTML。當(dāng) Web 服務(wù)器接收到一個(gè)擴(kuò)展名為 SHTML 的 Web 頁面請求時(shí),它將搜索 <SERVLET> 和 </SERVLET> 標(biāo)記。對于所有支持的 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。請使用 WebSphere應(yīng)用服務(wù)器 管理器來從 JAR 文件配置遠(yuǎn)程 Servlet 裝入系統(tǒng)。
    在上述的標(biāo)記示例中,initparm1 是初始化參數(shù)名,value 是該參數(shù)的值??梢灾付ǘ鄠€(gè)“名稱-值”對的集合。利用 ServletConfig 對象(被傳遞到 Servlet 的 init() 方法中)的 getInitParameterNames() 和 getInitParameter() 方法來查找參數(shù)名和參數(shù)值的字符串?dāng)?shù)組。在示例中,parm1 是參數(shù)名,并在初始化 Servlet 后被才被設(shè)置某個(gè)值。因?yàn)橹荒芡ㄟ^使用“請求”對象的方法來使用以 <PARAM> 標(biāo)記設(shè)置的參數(shù),所以服務(wù)器必須調(diào)用 Servlet service() 方法,以從用戶處傳遞請求。要獲得有關(guān)用戶的請求信息,請使用 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。請參閱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)。且僅對配置文件使用這些變量。
    其屬性如下:
     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>


    posted on 2009-07-09 09:42 找個(gè)美女做老婆 閱讀(19102) 評(píng)論(2)  編輯  收藏

    評(píng)論

    # 2[未登錄] 2014-03-26 15:35 1

    2  回復(fù)  更多評(píng)論   


    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产免费内射又粗又爽密桃视频| 亚洲视频一区二区在线观看| 四虎影视免费永久在线观看| 在线jyzzjyzz免费视频| 最近免费中文字幕mv在线电影| 特级无码毛片免费视频尤物| 久久青草国产免费观看| 国产婷婷成人久久Av免费高清 | 可以免费观看一级毛片黄a| 日韩毛片无码永久免费看| 巨胸喷奶水视频www网免费| 免费黄色大片网站| 在线精品免费视频| 国产免费观看网站| 亚洲精品无码专区久久同性男| 中文字幕亚洲日韩无线码| 日本亚洲国产一区二区三区| 中文字幕亚洲一区二区三区| 亚洲国产成人片在线观看| 亚洲国产老鸭窝一区二区三区| 亚洲国产成人手机在线电影bd| 亚洲欧洲另类春色校园网站| 亚洲精品美女久久久久久久| 美女露隐私全部免费直播| 美女被免费网站91色| 99精品视频在线观看免费播放| 69av免费视频| 日韩免费一级毛片| 亚洲无码视频在线| 亚洲av无码一区二区三区网站 | 国产精品四虎在线观看免费| 亚洲精品尤物yw在线影院| 国产成人亚洲综合色影视| 久久精品国产亚洲AV无码偷窥| 国产成人精品亚洲2020| 国产午夜亚洲精品不卡电影| 免费无码又爽又刺激一高潮| 蜜桃AV无码免费看永久| 国产成人青青热久免费精品| 在线观看亚洲精品福利片| 亚洲欧洲日本国产|