CGI與Servlet的區別和聯系

1. 定義:

CGI(Common Gateway Interface 公共網關接口)是HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網絡服務器上。

?

2. 功能:

絕大多數的CGI程序被用來解釋處理杰自表單的輸入信息,并在服 務器產生相應的處理,或將相應的信息反饋給瀏覽器。CGI程序使 網頁具有交互功能。

?

3. 運行環境:

CGI程序在UNIX操作系統上CERN或NCSA格式的服務器上運行。 在其它操作系統(如:windows NT及windows95等)的服務器上 也廣泛地使用CGI程序,同時它也適用于各種類型機器。

?

4. CGI處理步驟:

  ⑴通過Internet把用戶請求送到服務器。

  ⑵服務器接收用戶請求并交給CGI程序處理。

  ⑶CGI程序把處理結果傳送給服務器。

  ⑷服務器把結果送回到用戶。

?

?

Servlet是一種服務器端的Java應用程序,具有獨立于平臺和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。 Servlet是位于Web 服務器內部的服務器端的Java應用程序,與傳統的從命令行啟動的Java應用程序不同,Servlet由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。

工作模式:客戶端發送請求至服務器;服務器啟動并調用Servlet,Servlet根據客戶端請求生成響應內容并將其傳給服務器;服務器將響應返回客戶端。

?

?

Java Servlet與CGI (Common Gateway Interface 公共網關接口)的比較:

  與傳統的CGI和許多其他類似CGI的技術相比,Java Servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。在未來的技術發展過程中,Servlet有可能徹底取代CGI。

  在傳統的CGI中,每個請求都要啟動一個新的進程,如果CGI程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求由一個輕量級的Java線程處理(而不是重量級的操作系統進程)。

  在傳統CGI中,如果有N個并發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重復裝載了N次;而對于Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有著更多的選擇。

?

  * 方便  

  Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。

  * 功能強大

  在Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕松地完成。例如,Servlet能夠直接和Web服務器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。

  * 可移植性好

Servlet用Java編寫,Servlet API具有完善的標準。因此,為IPlanet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務器都直接或通過插件支持Servlet。

轉載于:https://www.cnblogs.com/MuyouSome/p/3938203.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis sorted set 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Gradle中的buildScript代碼塊

在編寫Gradle腳本的時候,在build.gradle文件中經常看到這樣的代碼: build.gradle1 2 3 4 5 6 7 8 9 buildScript {repositories {mavenCentral() } }repositories {mavenCentral() }這樣子很容易讓人奇怪,為什么repositories要聲明兩次哪&…

Redis List 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Hibernate查詢之Criteria查詢

轉自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一種比hql更面向對象的查詢方式。Criteria 可使用 Criterion 和 Projection 設置查詢條件。可以設置 FetchMode( 聯合查詢抓取的模式 ) ,設置排序方式,Crite…

IntelliJ Idea 常用插件

必備插件 Lombok 使用此插件可以使得我們的代碼簡潔,不用去寫很多的set/get方法。使用之前需要引入 lombok 插件依賴。 JsonFormat 基于GsonFormat。快速將JSON字符串轉換為實體類。它支持Jackson注釋。 MyBatis Log Plugin 將 SQL 直接打印在控制臺,不用…

jQuery 學習筆記(jQuery: The Return Flight)

第一課. ajax:$.ajax(url[, settings]) 練習代碼: $(document).ready(function() {$("#tour").on("click", "button", function() {$.ajax(/photos.html, {success: function(response) {$(.photos).html(response).fadeI…

Redis Hash 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Redis set 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

緩存初解(五)---SpringMVC基于注解的緩存配置--web應用實例

之前為大家介紹了如何使用spring注解來進行緩存配置 (EHCache 和 OSCache)的簡單的例子,詳見 Spring基于注解的緩存配置--EHCache AND OSCache 現在介紹一下如何在基于注解springMVC的web應用中使用注解緩存,其實很簡單&#xff0…

Redis String 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

于我,過去,現在和未來 —— 西格里夫·薩松

In me, past, present, future meet            于我,過去、現在和未來To hold long chiding conference              商討聚會 各執一詞 紛擾不息My lusts usurp the present tense             林林總總的 欲望,…

Java assert關鍵字

Java assert關鍵字 Assert 簡介 Java2在1.4中新增了一個關鍵字:assert。在程序開發過程中使用它創建一個斷言(assertion)。語法格式有兩種: assert condition; 這里condition是一個必須為真(true)的表達式。如果表達式的結果為true,那么斷言為…

linux 二級域名設置

首先,你的擁有一個有泛域名解析的頂級域名,例如: domain.com  其次,在 httpd.conf 中打開 mod_rewrite  之后,在 httpd.conf 的最后,添加以下內容:  RewriteEngine on  RewriteMap lowe…

Spring Boot @Conditional 注解

Spring Boot Conditional注解 Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件的才給容器注冊Bean。 Conditional注解定義 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documente…

計算幾何 半平面交

LA 4992 && hdu 3761 Jungle Outpost 杭電的有點坑啊。。一直爆內存,后來發現大白的半平面交模板那里 point *p new point[n]; line *q new line[n]這里出了問題,應該是在函數里面申請不了比較大的數組,所以爆內存。。我在全局定義…

Maven 強制導入jar包

場景 有時候因為各種原因(依賴有了,jar包有了),項目中就是沒有這個jar包。 在需要強導的項目中創建lib文件夾,將需要強導的jar包訪問lib中。添加依賴${pom.basedir}:獲取當前所在的項目目錄 ${pom.basedir&…

0910

我累得時候希望你能在我身邊,在你的懷里好好的睡一覺。轉載于:https://www.cnblogs.com/zhanzhao/p/3964175.html

《Java 高并發》03 線程的生命周期

相關概念 進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程中可以啟動多個線程。 一個進程是一個獨立的運行環境,它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。Java運行環境是一個包含…

OpenLayers3 online build

openlayers3使用了一個比較復雜的build工具,從github上下載下來的代碼中并沒有build之后的版本,要配置build環境又比較繁瑣,好在官方的example中提供了在線的版本,下面就是link: http://openlayers.org/en/v3.0.0/buil…

Mysql 必知必會(一)

文章案例所需的SQL文件,點擊下載 使用MySQL 進入mysql安裝目錄下的bin目錄: 連接Mysql:mysql -uroot -p123456;顯示Mysql下的所有數據庫:show databases;切換數據庫:use local;顯示數據庫下所有表名:show t…