`
荷戟者
  • 浏览: 280253 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CGI与Servlet的比较

 
阅读更多

转载自:http://www.maxhis.info/archives/351

 

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

CGI(Common Gateway Interface)程序,主要用Perl、Shell Script或C编写,能够向客户端提供动态内容,即每次客户端浏览器访问某一页面时,可以看到不同的内容。CGI应用开发比较困难,因为它要求程序员有处理参数传递的知识,这不是一种通用的技能。CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中。每一个CGI应用存在于一个由客户端请求激活的进程中,并且在请求被服务后被卸载。这种模式将引起很高的内存、CPU开销,而且在同一进程中不能服务多个客户。

Servlet对CGI的最主要优势在于一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载。

Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容。
Servlet对CGI的最主要优势在于一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载。

===========分割线==============

CGI和Servlet的前世今生:

CGI(Common Gateway Interface),通用网关接口

通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。

Servlet

Servlet最初是在1995年由James Gosling 提出的,因为使用该技术需要复杂的Web服务器支持,所以当时并没有得到重视,也就放弃了。后来随着Web应用复杂度的提升,并要求提供更高的并发处理能力,Servlet被重新捡起,并在Java平台上得到实现,现在提起Servlet,指的都是Java Servlet。Java Servlet要求必须运行在Web服务器当中,与Web服务器之间属于分工和互补关系。确切的说,在实际运行的时候Java Servlet与Web服务器会融为一体,如同一个程序一样运行在同一个Java虚拟机(JVM)当中。与CGI不同的是,Servlet对每个请求都是单独启动一个线程,而不是进程。这种处理方式大幅度地降低了系统里的进程数量,提高了系统的并发处理能力。另外因为Java Servlet是运行在虚拟机之上的,也就解决了跨平台问题。如果没有Servlet的出现,也就没有互联网的今天。
在Servlet出现之后,随着使用范围的扩大,人们发现了它的一个很大的一个弊端。那就是为了能够输出HTML格式内容,需要编写大量重复代码,造成不必要的重复劳动。为了解决这个问题,基于Servlet技术产生了JavaServet Pages技术,也就是JSP。Servlet和JSP两者分工协作,Servlet侧重于解决运算和业务逻辑问题,JSP则侧重于解决展示问题。Servlet与JSP一起为Web应用开发带来了巨大的贡献,后来出现的众多Java Web应用开发框架都是基于这两种技术的,更确切的说,都是基于Servlet技术的。


--------------------分割线-------------------------
Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。 
而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet 。 
分享到:
评论
1 楼 kxys422834 2012-08-17  
那cgi没有用处了吗?

相关推荐

    Java程序与Servlet、ASP、PHP、CGI等的通信.pdf

    Java程序与Servlet、ASP、PHP、CGI等的通信 Java程序可以与Servlet、ASP、PHP、CGI等程序进行通信,这些程序实际上是运行在Web服务器上的程序。它们可以从用户端接收参数,进行处理,并将结果反馈给用户。我们常见...

    servlet-api.jar

    Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势: 性能明显更好。 Servlet 在 Web 服务器的地址空间...

    Servlet中文内部教程

    Servlet与传统的CGI(Common Gateway Interface,通用网关接口)相比具有明显的优势。CGI是一种较早的技术,它可以由多种编程语言编写,但每次处理HTTP请求时都需要启动一个新的进程,这在高并发环境下会导致性能...

    servlet总结

    #### 二、Servlet与CGI对比及特点 ##### 2.1 Servlet vs CGI - **相同点**:两者都是运行在Web服务器端的组件,都能产生动态网页输出。 - **不同点**: - 进程与线程:传统CGI对每个HTTP请求都会创建一个新的进程...

    魔乐学习servlet

    【Servlet与MVC模式】 在Java web开发中,Servlet常与Model-View-Controller(MVC)模式结合使用。Servlet可以作为Controller,负责接收请求、调用模型进行业务逻辑处理,并将结果传递给视图进行展示。通过这种方式...

    Servlet教程.pdf

    与传统的CGI(Common Gateway Interface)相比,Servlet有显著的优势。CGI每次请求都会启动新的进程,而Servlet则使用线程来处理请求,更加高效。由于基于Java,Servlet具有跨平台性,可以在支持Java的任何Web服务器...

    Java Servlet 学习课件

    Servlet与JSP(JavaServer Pages)的关系紧密,Servlet通常负责后端的业务逻辑处理,而JSP则专注于生成可视化用户界面。Servlet容器(如Web服务器)管理Servlet的生命周期,而JSP容器处理JSP的编译和渲染。两者可以...

    Servlet详细教程与讲解

    Servlet的核心优势在于它的高效性和可扩展性,相较于早期的CGI(Common Gateway Interface)技术,Servlet在处理大量并发请求时表现更优,因为它可以在内存中保持一个实例,避免了对每个请求都创建新对象的开销。...

    servlet ppt

    一个比较好的servlet的讲解ppt:随着动态网页技术的日益发展,1955年Sun公司首先将Java引入,并介绍了基于Java的小应用程序Applet,随后又在1996年推出了Servlet。Java Servlet的编程模式和CGI类似,但它的功能和...

    Domino_Servlet示例

    本文将详细介绍 Domino Servlet 的开发和运行配置,包括 Servlet 的特点、与 Agent 的区别、Domino 对 Servlet 的支持、Servlet 的开发和运行配置等。 一、Servlet 的特点 Servlet 是运行在服务器上的 Java 程序,...

    精通Servlet

    servlet 的优点在于可以扩展 Java-enabled 服务器的基本功能,提供强而有力的技术来取代 CGI(common gateway interface)。与传统的 web 服务器相比,servlet 可以生成动态网页,而不只是提供静态网页服务。同时,...

    servlet 8个最基础demo

    在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。 实现过程

    Servlet与JSP.ppt的基础知识

    Servlet与JSP是Java Web开发中的核心技术,它们在构建动态网站和企业级应用程序中发挥着重要作用。本讲座主要涵盖了以下几个核心知识点: 1. **Web技术的发展**:Web技术起源于20世纪80年代,是一种分布式应用架构...

    企业信息管理系统 SERVLET

    与传统的CGI(通用网关接口)相比,SERVLET具有更高的性能和可扩展性。在企业信息管理系统中,SERVLET作为后端的核心,负责接收前端的HTTP请求,处理业务逻辑,访问数据库,然后将处理结果以HTTP响应的形式返回给...

    Servlet课件.doc

    Servlet与Applet不同,Applet运行在客户端的浏览器中,而Servlet则在服务器端运行,处理来自Web客户端的请求。 Servlet是实现CGI(Common Gateway Interface)功能的一种高效方式。CGI允许Web服务器与外部应用程序...

    JavaEE Servlet2.1说明文档

    Servlet在功能上与CGI和NSAPI相似,但提供了跨平台的能力和更高的性能。 四、Servlet生命周期 1. 加载与初始化:Servlet被Servlet容器(如Tomcat)加载后,会调用`init()`方法进行初始化。 2. 服务阶段:当接收到...

    servlet2.3规范中文版

    Servlet相对于其他Web服务技术,如CGI,具有显著优势,如更快的运行速度(由于使用多线程)、标准化的API(跨平台兼容)以及与系统的无关性(一次编写,多处运行)。 Servlet接口是Servlet API的核心,所有Servlet...

    servlet 函数 中文介绍

    1. 加载与实例化:当服务器启动或第一次接收到针对Servlet的请求时,Servlet容器会加载Servlet类并创建其实例。 2. 初始化:Servlet实例化后,会调用`init()`方法进行初始化。在这里,Servlet可以配置属性,打开...

Global site tag (gtag.js) - Google Analytics