麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Servlet技術及其與CGI的比較

2019-11-18 15:08:20
字體:
來源:轉載
供稿:網友

  WebSphere application Server作為e-Business應用的核心,提供了基于java Servlet技術的引擎,它把基本的HTTP Server擴充成為基于Java的應用服務器,提供了比CGI技術更優的性能。本文旨在對Java Servlet技術作一般性的介紹,并與傳統的CGI技術進行比較。
  Servlet是用Java編寫的Server端程序,它與協議和平臺無關。Servlet運行于Java-enabled Web Server中。Java Servlet可以動態地擴展Server的能力,并采用請求-響應模式提供Web服務。

  最早支持Servlet技術的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server開始支持標準的Servlet API。Servlet的主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。這個過程為:

  ?客戶端發送請求至服務器端;

  ?服務器將請求信息發送至Servlet;

  ?Servlet生成響應內容并將其傳給Server。響應內容動態生成,通常取決于客戶端的請求;

  ?服務器將響應返回給客戶端。

  Servlet看起來像是通常的Java程序。Servlet導入特定的屬于Java Servlet API的包。因為是對象字節碼,可動態地從網絡加載,可以說Servlet對Server就如同Applet對Client一樣,但是,由于Servlet運行于Server中,它們并不需要一個圖形用戶界面。從這個角度講,Servlet也被稱為Faceless Object。

  Servlet的優勢

  Java Servlet提供了許多優勢:

  ?Servlet可以和其他資源(文件、數據庫、Applet、Java應用程序等)交互,以生成返回給客戶端的響應內容。假如需要,還可以保存請求-響應過程中的信息。

  ?采用Servlet,服務器可以完全授權對本地資源的訪問(如數據庫),并且Servlet自身將會控制外部用戶的訪問數量及訪問性質。

  ?Servlet可以是其它服務的客戶端程序,例如,它們可以用于分布式的應用系統中。

  ?可以從本地硬盤,或者通過網絡從遠端硬盤激活Servlet。

  ?Servlet可被鏈接(chain)。一個Servlet可以調用另一個或一系列Servlet,即成為它的客戶端。

  ?采用Servlet Tag技術,可以在Html頁面中動態調用Servlet。

  ?Servlet API與協議無關。它并不對傳遞它的協議有任何假設。

  ?像所有的Java程序一樣,Servlet擁有面向對象Java語言的所有優勢。

  Servlet與CGI-BIN

  概括來講,Servlet可以完成和CGI相同的功能。

  CGI應用開發比較困難,因為它要求程序員有處理參數傳遞的知識,這不是一種通用的技能。CGI不可移植,為某一特定平臺編寫的CGI應用只能運行于這一環境中。每一個CGI應用存在于一個由客戶端請求激活的進程中,并且在請求被服務后被卸載。這種模式將引起很高的內存、CPU開銷,而且在同一進程中不能服務多個客戶。

  Servlet提供了Java應用程序的所有優勢??可移植、穩健、易開發。使用Servlet Tag技術,Servlet能夠生成嵌于靜態HTML頁面中的動態內容。

  Servlet對CGI的最主要優勢在于一個Servlet被客戶端發送的第一個請求激活,然后它將繼續運行于后臺,等待以后的請求。每個請求將生成一個新的線程,而不是一個完整的進程。多個客戶能夠在同一個進程中同時得到服務。一般來說,Servlet進程只是在Web Server卸載時被卸載。(見圖1)

  圖1 Servlet運行模式

  圖2 Servlet生命周期

  Servlet生命周期

  Servlet的生命周期(見圖2)可以被歸納為以下幾點:

  ?裝載Servlet。這項操作一般是動態執行的。然而,Server通常會提供一個治理的選項,用于在Server啟動時強制裝載和初始化特定的Servlet(1);

  ?Server創建一個Servlet的實例(2);

  ?Server調用Servlet的init()方法(3);

  ?一個客戶端的請求到達Server(1);

  ?Server創建一個請求對象(4);

  ?Server創建一個響應對象(5);

  ?Server激活Servlet的service()方法(6),傳遞請求(7)和響應(8)對象作為參數;

  ?service()方法獲得關于請求對象的信息,處理請求,訪問其他資源(9),獲得需要的信息(10);

  ?service()方法使用響應對象的方法,將響應傳回Server(11)、(12),最終到達客戶端(13)。service()方法可能激活其它方法以處理請求,如doGet()或doPost()或程序員自己開發的新的方法;

  ?對于更多的客戶端請求,Server創建新的請求和響應對象,仍然激活此Servlet的service()方法,將這兩個對象作為參數傳遞給它。如此重復以上的循環,但無需再次調用init()方法。一般Servlet只初始化一次;

  ?當Server不再需要Servlet時(一般當Server關閉時),Server調用Servlet的Destroy()方法。

  Servlet與CGI程序的比較

  CGI(Common Gateway Interface)程序,主要用Perl、Shell Script或C編寫,能夠向客戶端提供動態內容,即每次客戶端瀏覽器訪問某一頁面時,可以看到不同的內容。這里對完成相同功能的CGI程序和Java Servlet程序作一比較,以便更清楚地看到Servlet的簡單特性。

  這里CGI和Servlet程序的功能均為獲得客戶端在瀏覽器表單中輸入的參數(Firstname,Lastname),并將返回給客戶端。相應的CGI程序和Servlet程序分別如下:

  ?CGI程序(Perl):

  $query?string=$ENV{?QUERY?STRING?};

  $query?string=As/%([dA-Fa-f][dA-Fa-f])/pack(″C″,hex()$1))/eg;$query?string=As/+//g;

  @pairs=split(/&/,$query?string);

  foreach $pair(@pairs) {

   ($key,$value)=split(/=/,$pair);

   $form?data{$key}=$value;

  }

  $firstname=$form?data{″firstname″};

  $lastname=$form?data{″lastname″};

  PRint ″Hello,$firstname $lastname. Thank you for your visit! ″;

  ?Servlet程序:

  public void service(HttpServletRequest request,HttpServletResponse response)

  throws ServletExeption,IOExeption

  {

   ServletOutputStreamout=response.getOutputStream();

   response.setContentType(″text/html″);

   String firstname=request.getParameter(″firstname″);

   String lastname=request.getParameter(″lastname″);

   out.println(″Hello,″+firstname+″ ″+lastname+″.″);

   out.println(″Thank you for your visit!″);

   out.lose()

  }

  可以很明顯地看到Java Servlet源代碼比相應的CGI Perl Script簡單許多。這里需要導入三個package:javax.servlet、javax.servlet.http和java.io。定義Servlet的類擴展了HttpServlet class,而不是GenericServlet class,因為此Servlet需要與HTML form進行交互。

  在CGI程序中有很大一部分用于處理對參數的提取和解碼過程,而在Servlet程序中,解碼傳遞的參數部分并不需要額外編寫。從HttpServlet class繼續來的基本函數可以自動完成解碼的過程。因此,程序員可以在Servlet service()方法中直接獲取由客戶端創建和編碼的Key-value對。解碼后的Key-value對可以直接從HttpServlet class的service()方法的第一個參數中獲得。這將極大地減少程序員的勞動量和重復的代碼勞動,并降低編碼難度。

  綜上所述,Servlet在性能、編寫難度、可移植性等方面比CGI有明顯優勢。在WebSphere Application Server中提供了功能強大的Servlet API,它們比JSDK擁有更多的功能和更優的性能,為Servlet的編程提供了很好的支持。隨著WAS的日益推廣和Java技術的普及,可以預見,Servlet技術將取代CGI,成為對Web Server功能擴充的標準技術。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久亚洲按摩 | 男女无套免费视频 | 国产精品久久久久久久久久 | 孕妇体内谢精满日本电影 | 亚洲一级毛片 | 九色免费视频 | 国产精品久久久久久影视 | 黄色伊人网站 | 超碰97在线人人 | 性高跟鞋xxxxhd4kvideos | 国产毛片在线 | 欧美18一19sex性护士农村 | 91成人影库| 欧美综合日韩 | 亚洲精品欧美在线 | 免费小毛片 | 国产精品99久久久久久久 | 国产精品99一区二区 | 成人性生活视频在线播放 | 免费特黄 | 免费一级欧美 | 天天黄色片 | 蜜桃久久一区二区三区 | av在线免费观看国产 | 国产色视频一区 | 亚洲精品无码不卡在线播放he | 国产精品视频自拍 | 99精品国产小情侣高潮露脸在线 | 国产成人精品一区在线播放 | 91国内精品久久久久免费影院 | 黄色成人短视频 | 国产99视频精品免视看9 | 久久91亚洲人成电影网站 | 国产精品一区在线观看 | 一本一本久久a久久精品综合小说 | 九一成人 | 一区二区国产在线 | 久久艹精品视频 | 大奶一级片 | 国产精品伦视频看免费三 | 成年性羞羞视频免费观看无限 |