Servlet 与 CGI的区别

CGI:Common Gateway Interface,通用网关接口。 php

Servlet的生命周期及与CGI的区别:

  • Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
  • 与cgi的区别在于servlet处于服务器进程中,它经过多线程方式运行其service方法,一个实例能够服务于多个请求

CGI处理步骤:

首先,客户端(即Web浏览器)根据某资源的URL向Web服务器提出请求;Web服务器的守护进程(HTTP Daemon)将此请求的参数经过标准输入和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序把处理结果经过标准输出返回给HTTP Daemon进程再由HTTP Daemon进程返回给客户端,由浏览器解释执行,将最终结果在用户面前显示。 数据库

Servlet与CGI的比较:

      和CGI程序同样,Servlet能够响应用户的指令(提交一个FORM等等),也能够象CGI程序同样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误)。
  然而,Servlet的机制并不单单是这样简单的与用户表单进行交互。传统技术中,动态的网页创建和显示都是经过CGI来实现的,可是,有了Servlet,您能够大胆的放弃全部CGI(perl?php?甚至asp!),利用Servlet代替CGI,进行程序编写。
  对比一:当用户浏览器发出一个Http/CGI的请求,或者说调用一个CGI程序的时候,服务器端就要新启用一个进程(并且是每次都要调用),调用CGI程序越多(特别是访问量高的时候),就要消耗系统越多的处理时间,只剩下愈来愈少的系统资源,对于用户来讲,只能是漫长的等待服务器端的返回页面了,这对于电子商务激烈发展的今天来讲,不能不说是一种技术上的遗憾。
  而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并非新启用一个进程,而是在一个Web服务器的进程中共享和分离线程,而线程最大的好处在于能够共享一个数据源,使系统资源被有效利用。 浏览器

      对比二:传统的CGI程序,不具有平台无关性特征,系统环境发生变化,CGI程序就要瘫痪,而Servlet具有Java的平台无关性,在系统开发过程当中保持了系统的可扩展性、高效性。 缓存

      对比三:传统技术中,通常大都为二层的系统架构,即Web服务器+数据库服务器,致使网站访问量大的时候,没法克服CGI程序与数据库创建链接时速度慢的瓶颈,从而死机、数据库死锁现象频繁发生。而咱们的Servlet有链接池的概念,它能够利用多线程的优势,在系统缓存中事先创建好若干与数据库的链接,到时候若想和数据库打交道能够随时跟系统"要"一个链接便可,反应速度可想而知。 服务器

相关文章
相关标签/搜索