CGI和Servlet的对比
来源:互联网 发布:手机淘宝如何打造爆款 编辑:程序博客网 时间:2024/06/01 09:14
转载自:http://www.maxhis.info/java/cgi-vs-servlet/
概括来说,CGI和Servlet可以完成相同的功能。
CGI(Common Gateway Interface)程序,主要用Perl、Shell Script或C编写,能够向客户端提供动态内容,即每次客户端浏览器访问某一页面时,可以看到不同的内容。CGI应用开发比较困难,因为它要求程序员有处理参数传递的知识,这不是一种通用的技能。CGI不可移植,为某一特定平台编写的CGI应用只能运行于这一环境中。每一个CGI应用存在于一个由客户端请求激活的进程中,并且在请求被服务后被卸载。这种模式将引起很高的内存、CPU开销,而且在同一进程中不能服务多个客户。
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技术的。
而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet 。
- CGI和Servlet的对比
- Servlet和CGI对比
- servlet 和 cgi 对比
- Servlet和CGI的区别
- Servlet和CGI的区别
- CGI和Servlet的区别
- servlet和cgi的区别
- Servlet和CGI的区别
- Servlet和CGI的较量
- Servlet和CGI的区别
- Servlet和CGI的区别
- Servlet和CGI的区别
- Servlet和CGI的区别
- Servlet和CGI的区别
- Servlet的生命周期,Servlet和CGI…
- CGI与Servlet的区别和联系
- 谈谈Servlet的生命周期和Servlet和CGI的区别。
- Servlet 和 CGI 区别
- 使用命令行上传代码到github
- 278. First Bad Version [easy] (Python)
- ssh-keygen的使用方法
- 资本寒冬,看咕咚、Keep、Feel们如何逆势而上
- 初识IntPtr
- CGI和Servlet的对比
- 一起学Netty(二十)netty的比较规范的C/S端的写法
- 第一个JNI例子
- 编写类似strcmp() strncmp()函数
- Hive ORC数据格式的MapReduce读写
- 微服务应用-基于Spring Cloud和Docker构建电影推荐微服务
- Ant自动编译Java project时无法找到rt.jar的处理方法
- 显示Intent和隐式Intent的使用(意图)
- 虚拟机打包重新部署全过程详细说明