Web服务器是一个很简单的东西,并不负责动态网页的构建,只能转发静态网页。同时Apache也说,他能支持perl,生成动态网页。这个支持perl,其实是apache越位了,做了一件额外的事情。

现在我们看生成动态网页这件事情。

CGI的定义是:外部应用程序与Web服务器之间的接口。

明白了吧?也就是说,所谓的动态网页,都是要外部应用程序生成的,而不是Web服务器能干的事情。所以,最初的、最简单的CGI,是使用C来写的,很简单。

到了后来,大家觉得老用C也不是个办法啊,效率这么慢,老板逼得紧,天天加班不是个事,于是PHP、ASP、Java、Perl、Python这些高级语言就掺合进来了。

其中,ASP由于是微软一家单独支撑,不开源,还要买他那么贵的服务器软件,开发者就不想用了,越来越没落。

用Java语言来写CGI,就是JSP技术

PHP的正名为:超文本预处理语言。从这个名字可以看出,就是专门为动态网页而生的,它的好处是可以潜入HTML,而不是像C那样重新生成整个文本。这个现在已经不是优势了,JSP一样可以做到这点。PHP由于是动态加载,边解释边执行,所以效率没有java高,这个问题可以用预编译和使用C、C++模块来解决。

这些语言里面,Java的发展是最迅速的,所以Java产生了一堆好东西,比如Tomcat,比如IBM的Websphere,WebSphere是真正的应用服务器,而Tomcat还算不上,因为他还不能真正支持很多J2EE的API,但是Tomcat作为servlet的容器,基本满足写CGI的需求,这样使得Tomcat被使用得非常广泛。

Tomcat是apache的一个子项目,它也不务正业,也支持做web服务器的功能,这是很搞笑的,你一个动态网页处理容器,干嘛要做web服务器呢?这让我想到做产品时产品经理的贪嗔痴。但Tomcat全部使用java完成,并且,他是单进程结构,是使用CPU密集型的架构来设计的,而上篇文章讲到web服务器其实是IO密集型的,这样Tomcat在处理大规模的Web请求时,根本没法玩。所以很多人说,使用apache处理静态网页,使用tomcat处理动态网页。

除了Java有Tomcat作为容器来进行支撑外,其他的CGI就很土了,都是脚本,一是需要边解释边执行,二是都是一锤子买卖,一锤子买卖的意思是,这些个脚本的CGI,都是使用其解释器+CGI部分合成一个CGI程序,apache接收到请求后,就启动一个CGI程序,生成动态内容后,CGI程序退出。这种方式也太土鳖了,让我这种长期习惯于windows编程的人非常鄙视。

这种方式显然是不行的,效率非常低,所以,fastCGI就出来了,fastCGI在CGI和web服务器中间再加了一层。

fastCGI用来管理多个CGI进程,它负责同时生成和回收多个CGI进程,以服务器的内存空间,换取处理时间。

一个不相关的感想:不论CGI怎么变,fastCGI可以以不变应万变,如果把网页的请求过程看成产业链,fastCGI无疑是一个非常好的切入点,可以经久不衰,并且以不变应万变。

经过fastCGI优化之后,从效率上讲,PHP等脚本语言与java只差一点了,这点就是解释执行,所以php需要预编译,进行代码缓存之后,效率应该可以接近jsp。

另外一个问题是,nginx以减少进程的方式革了apache的命,会不会有新的程序,以nginx的方式,来革fastCGI的命呢?

JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:

  • 性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
  • 服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。
  • JSP基于Java Servlets API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
  • JSP页面可以与处理业务逻辑的servlets一起使用,这种模式被Java servlet 模板引擎所支持。

最后,JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。

CGI与JSP联系与区别相关推荐

  1. Servlet和JSP之间的区别

    JSP和Servlet都是与使用Java构建基于Web的应用程序有关的重要概念. 基本上,Servlet是Java中HTML,而JSP是HTML中的Java. 任何典型的Web开发面试都可能有几个基于 ...

  2. JSF,Servlet和JSP有什么区别?

    本文翻译自:What is the difference between JSF, Servlet and JSP? How are JSP and Servlet related to each o ...

  3. serverlet 区别_浅谈JSP serverlet的区别与联系

    jsp是html包含java servlet是java包含html jsp请求到tomcat---tomcat封装了jsp到servlet实现. 所以jsp请求时候,会自动创建session 而不用在 ...

  4. java和jsp一样吗_JS和JSP有哪些区别,你真的知道吗?

    最近很多同学在纠结于名词缩写之间的相似性,因此本人也来写一篇,讲讲JS和JSP的区别. SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方 ...

  5. jsp和js区别 一

    最近很多同学在纠结于名词缩写之间的相似性,因此本人也来写一篇,讲讲JS和JSP的区别. SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方 ...

  6. @include与jsp:include的区别

    1.可以使用一个JSP指令或者一个标准行为,在JSP页面中引入其他的页面片段. 2. include指令:在翻译阶段(将JSP页面转换成servlet的阶段),JSP的include指令会读入指定的页 ...

  7. java jsp setAttribute setParameter 区别

    getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型  getParam ...

  8. %@ INCLUDE FILE=%与JSP:INCLUDE PAGE=/区别

    2019独角兽企业重金招聘Python工程师标准>>> 两者最重要的区别:JSP指令<%@ include file=""%>,是将被引入的JSP与原 ...

  9. %@ include file=和jsp:include file=区别

    <%@include file="a.jsp"%>是在编译时加入,所谓静态,就是在编译的时候将jsp的代码加入进来再编译,之后运行. <jsp:include p ...

最新文章

  1. dede列表分页php,dede列表页分页英文调用方法
  2. 从PPT到Word,用Python轻松实现办公自动化
  3. 各种梯度下降 bgd sgd mbgd adam
  4. web访问hive速度怎么样_使用Hive的web界面:HWI
  5. QT中关于按钮以及菜单栏工具添加图标,以及快捷方式
  6. numpy.sum详解
  7. malloc/free和new/delete的区别
  8. initialProps被React-Navigation的navigation属性覆盖解决方案
  9. 触发器无法启动分布式事务。
  10. 使用open flash chart的BarGlass时遇到的问题
  11. This关键字的一些更新的理解
  12. 用手机约会为何胜过电脑?
  13. UFT11.5如何复用QTP9.2的脚本
  14. linux 查看libevent 安装目录,Linux系统centos6.7上安装libevent
  15. C#.NET分别以GET和POST方式抓取远程页面
  16. JMeter接口测试入门
  17. oracle toad 价格,Toad for oracle 软件产品模块对比,方便大家选型。
  18. 【FinE】期权定价的二叉树方法(1)
  19. c语言switch不可以用枚举,76-枚举类型用在switch中
  20. C#: //todo

热门文章

  1. JAVA:eclipse文本中文支持
  2. 洛谷——P1179 [NOIP2010 普及组] 数字统计
  3. 实验2-1-5 将x的平方赋值给y (5 分)
  4. 原生微信小程序添加背景音乐
  5. c++之std::distance()函数
  6. java架构-Spring MVC 与 Servlet
  7. Word 2003中对不同的节设置不同的页面边框的特殊情况小结
  8. preact源码学习(3)
  9. 【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
  10. root用户重置其他密码