JSP/ASP/.Net/PHP功能比较

来源:互联网 发布:pocket 知乎 编辑:程序博客网 时间:2024/05/22 03:02

JSP与ASP/.Net/PHP功能比较
疯狂代码 http://www.crazycoder.cn/ ĵ:http:/www.crazycoder.cn/Java/Article22186.html
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标
准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和
JSP标记(tag),从而形成JSP文件(*.jsp)。
Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代
码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能

ASP即Active Server Page的缩写。它是一种包含了使用VB Script或Jscript脚本程序代码的网页。当浏览器浏
览ASP网页时, Web服务器就会根据请求生成相应的HTML代码然后再返回给浏览器,这样浏览器端看到的 就是
动态生成的网页。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互。
是一种简单、方便的编程工具。在了解了VBSCRIPT的基本语法后,只需要清楚各个组件的用途、属性、方法
,就可以轻松编写出自己的ASP系统。ASP的网页文件的格式是.ASP。
PHP 是一种用来制作动态网页的服务器端脚本语言。你通过PHP和HTML创建页面。当访问者打开网页时,服
务器端便会处理 PHP 指令,然后把其处理结果送到访问者的浏览器上面,就好像 ASP 或者是 ColdFusion 一
样。然而,PHP 跟 ASP 或 ColdFusion 不一样的地方在于,它是跨平台的开放源代码。PHP 可以在
Windows NT 以及很多不同的 Unix 版本中执行,它也可以被编译为一个 Apache 模块,或者是一个CGI二进
制文件。当被编译为 Apache 模快时,PHP 尤其轻巧方便。它没有任何繁琐程序所产生的负担,因此可以很快
的返回结果,同时也不需为了保持较小的服务器内存映象,而去调整mod_perl。
PHP是一个什么原因出现的呢?它是一个技术人员希望能用一个快速的方面来完成他自己的个人主页中的一个
小应用。而在他一发不可收时出现了php,它使一个人能在多种操作系统下迅速的完成一个轻型的Web应用。
所以在短短的几年里,php迅速的升级了它的版本,同时在GNU的世界里找到了一个青梅竹马的伙伴----
Apache。这终于让php有了基础,能在一个最佳的环境中运行,同时由于两个产品都是公开源代码的产品,所
以大家可以使用它们的源代码将这两个产品用最完美的方式结合到一起,使用起来就如一个产品一样。个人认
为php是自由软件在web应用平台上一个决胜的工具,如果没有php的出现,还会有许多人认为自由软件就代
表了对开发人员的高技术要求、难记的代码、复杂的工具.....php使一个会使用basic的人员在极短的时间里快迅
学习并完成用户需要的应用。
  怎么说php呢?如果说ASP是一个COM,哪么php说的更精确了可以说php是一个纯粹的Script翻译器。
这也是php由3升级为4的一个重大原因,在4这个版本里它重写了语法分析器,从而加快了php整体的效能。而
且从中你也就会明白为什么php需要支持这种或是那种扩充功能时它一定要与相应系统的lib库进行再编绎的原
因。正因为它是正宗的“翻译器”,所以它是将script翻译成为需要执行的函数,再去执行它们,外部扩充不能
由一些“动态加载”的方式进行,所以只能静态的编绎进php中(这只能在windows中除外)。
  强势:
  1、一种能快速学习、跨平台、有良好数据库交互能力的开发语言。ASP比不上它的就是这种跨平台能力
了,而正是它的这种能力让Unix/Linux有了一种与ASP媲美的开发语言。语法简单、书写容易、现在市面上也
有了大量的书,同时Internet上也有大量的代码可以共享,对于一个初学者想学些“高深的Unix”下的开发来
说是一个决好的入手点。
  2、与Apache及其它扩展库结合紧密。php与Apache可以以静态编绎的方式结合起来,而与其它的扩展
库也可以用这样的方式结合(除外的就是Windows平台了)。这样的方式的最大的好处就是最大化的利用了
cpu时和内存,同时极为有效的利用了apache的高性能的吞吐能力。同时外部的扩展也是静态连编,从而达到
了最快的运行速度。由于与数据库的接口也使用了这样的方式,所以使用的是本地化的调用,这也让数据库发
挥了最佳效能。
  3、良好的安全性。由于php本身的代码开放所以它的代码在许多工程师手中进行了检测,同时它与
apache编绎在一起的方式也可以让它具有灵活的安全设定。所以到现在为止,php具有了公认的安全性能。
  弱势:
  1、数据库支持的极大变化。由于php的所有的扩展接口都是独立团队开发完成的,同时在开发时为了形
成相应数据的个性化操作,所以php虽然支持许多数据库,可是针对每种数据库的开发语言都完全不同。这样
形成针对一种数据库的工发工作,在数据库进行升级后需要开发人员进行几乎全部的代码更改工作。而为了让
应用支持更多种的数据库,就需要开发人员将同样的数据库操作使用不同的代码写出n种代码库出来,让程序员
的工作量大大增大。
  2、安装复杂。由于php的每一种扩充模块并不是完全由php本身来完成,需要许多外部的应用库,如图形
需要gd库、LDAP需要LDAP库.……这样在安装完成相应的应用后,再联编进php中来。这也就是我以前在代码
联盟新闻组中对网友所说的一定要在FreeBSD/Linux/Unix下运行php的原因。只有在这些环境下才能方便的编
绎对应的扩展库。这些都是一般开发人员在使用php前所先要面对的问题,正是这样的问题让许多开发人员转
而使用其它的开发语言,必竟Unix没有那么多的用户。
  3、缺少企业级的支持。没有组件的支持,哪么所有的扩充就只能依靠php开发组所给出的接口,事实上
这样的接口还不够多。同时难以将集群、应用服务器这样的特性加入到系统中去。而一个大型的站点或是一个
企业级的应用一定需要这样的支持的。注:在php的4.0版本以后加入了对servlet/javabean的支持,也许这样
的支持会在以后的版本中更加增强,也许这样的支持会是php以后的企业级支持的起点。
  4、缺少正规的商业支持。这也是自由软件一向的缺点,我想在国内php的开发人员正在快速增加,相信
在不久的将来,这样的支持能多起来。
  5、无法实现商品化应用的开发。由于php没有任何编绎性的开发工作,所有的开发都是基于脚本技术来
完成的。所以所有的源代码都无法编译,所以做完成的应用只能是自己或是内部使用,无法实现商品化。
  总结:
  适用人群:熟悉Unix环境,需要在最少的投入下完成快速的应用开发。
  适用平台:FreeBSD/Linux/Unix操作系统、Apache服务器适用应用:Internet高访问量、快速数据库开
发的应用。
.NET Framework自2002年3月在日本国内上市以来,至今已一年有余。据估计标准集成.NET Framework的
OS--Windows Server 2003将于2003年5月在日本上市。随着.NET环境的完善,作为足以抗衡Java的系统构
筑基础,开发人员需要认识.NET Framework。下面笔者就来分析一下.NET的优势与劣势。
XML Web服务并未成为普及.NET的导火索
  此前人们一直在想:“对.NET来说,是否存在不同于Java的、独特的应用领域和市场?”。
  业内普遍认为,微软新一代系统构筑环境--.NET Framework是在研究Java的基础上开发出来的。不仅功
能和架构相似,而且由于是在Java之后开发出来的,因此Java所没有的功能更是随处可见。比如在Web应用中
实现事件驱动型应用程序功能等。
  不过虽说如此,如果只是告诉用户“.NET Framework比Java好得多”,那么Java开发人员特意转而使用
.NET Framework的动机不会太强。
  由于Java已经先行积累了广泛的应用成果,积累了很多足以弥补其缺点的经验以及平台工具。只要不出现
Java难以应用的用途和市场,那么.NET Framework就很难阻止Java的进一步发展。
.NET的优势:企业信息系统部门可自行编程
  刚开始,微软就把易于开发XML Web服务作为.NET的优势而大加宣传。以XML Web服务为前提而设计
的.NET与Web服务具有极高的亲和性。但XML Web服务的产生却比较晚。尽管业内对它的期待和关注程度较
高,但由于可充分利用XML Web服务的“可赚钱的”业务模式尚未确立,所以目前与Web站点相比其市场仍
微不足道。其中,Java方面也正在加紧完善便于开发XML Web服务的功能。
  那么,是否存在.NET的独特用途呢?笔者通过采访所得到的一个答案是:.NET开发工具--Visual
Studo.NET的易用性使得它在Java很难实现的“用户企业(信息系统部门)也可编程的系统”上超人一头。笔
者认为可能还存在其他这样的领域。当然,尽管.NET的标准语言VB.NET和C#都与Java一样复杂,但是Visual
Studo.NET却很好地消除了这种复杂性。
  比如,日本兰碧儿(NOEVIR)只靠自己的信息系统部门就完成了Web代理店支援系统的从企划到编程的
全部工作。日本一家系统集成商曾表示,此前导入Java系统的用户企业中“选用.NET的信息系统部门就有望自
行开发或对系统进行修改”。
  笔者认为,由于Java本身较为复杂,且不易学习掌握,因此“用户企业只负责企划,而将编程工作完全委
托给集成商的现象非常普遍”。
  在COBOL和VB(客户商/服务器)的全盛时期,信息系统部门自己编程、对系统进行部分修改和功能追加
是很正常的事情。如果连细小的系统修改都要外包,那么系统的维护成本自然会很高,因此就将失去灵活性。
甚至于还有可能削弱信息系统部门的业务能力。说到企划,听起来好听,但如果连大体的情况也不了解,恐怕
与开发商交涉都很困难。这也许就是Java的一个“弊端”吧。
  此外,“成本比UNIX低”以及“可以充分利用Windows技术资源”等原因也在加速.NET Framework的
普及。作为客户端/服务器系统的开发环境,VB的后续语言--.NET中的“Windows Form”最具竞争力。越来
越多的系统集成商开始选择这一工具构筑系统。
.NET的劣势:应用成果少、开放性差
  反过来说,.NET的劣势则在于在大型系统中的应用成果少、缺乏“开放性”。
  对于应用成果来说,今后其数量将会不断增加。据悉,日本Kabu.com证券将在2003年度内利用.NET
Framework全面重新构筑该公司目前利用ASP构筑的系统。
  在“开放性”方面又将会如何呢?Java普及的主要因素很多,但笔者认为其中最关键的在于“开放性”。
由于可各种OS上运行,而且很多开发商还提供了Web应用服务器和开发工具,因此用户可以随意选择。而开发
商则通过在功能和性能方面相互竞争来不断提高产品水平。
  而.NET Framework怎么样呢?只要想应用于业务系统中,其OS实际上则只能限于Windows。尽管微软
已经提供了FreeBSD版.NET Framework,但其目的仅限于学术研究。
  今后人们所能期待的是Mono Project。Mono Project是指完全独立于微软、正在开发开放源码版.NET
Framework的计划。主导该计划的是一家名为Ximian的Linux企业,这家公司成功地开发了Linux标准桌面环境
GNOME,目前已受到业界的广泛关注。
  2003年1月该计划还发布了运行Web应用程序ASP.NET的Web服务软件XSP。尽管很多功能仍在开发之中
,但目前开发工作进展顺利。目前正面向Linux和Windows进行开发。据Mono Project称,由于该软件依赖于
Linux的部分不多,因此能够轻松地向其他UNIX OS移植。
  能否形成像Mono一样的开放环境将是.NET普及的关键所在。微软目前已经向业界标准化机构ECMA(欧
洲计算机制造商协会)提交了.NET标准,此举表明微软将采用开放标准。但目前尚不清楚此举只是单纯的一种
姿态,还是真的要开放.NET。这就要看微软今后是否能够继续公开足够的相关标准和信息了。
JSP 是ASP的翻板,但是有使用JAVA作脚本语言的优势,简单的来说它具有JAVA所具有的强大功能,而且JSP脚本
都会被编译成一种中间代码,运行速度很快。
ASP如果结合COM功能也很强大,不过默认脚本语言太烂了。
PHP是由传统的Liunx CGI脚本发展而来的,本身就是一种功能很强大的语言,可惜由于它的产生缘由和面向
对象的特性较差加上没有大公司的支持而限制了发展,不过谁也不能保证它的以后版本不要有所突破。
ASP.NET继承了以上所有脚本技术的优点,可以使用VB,C++,C#,JS等多种语言作系统脚本语言,发明了可以
随时引入某个功能类集的名字空间,发明了可以响应客户端事件的HTML和WEB FORM控件,对XML的支持可
以说完美无暇,经过编译过的脚本速度更快,简直是WEB程序员不可不学的超级WEB服务脚本。
本文将对目前最常用的四种动态网页语言Perl(Practical Extraction and Report Language)、
PHP(Hypertext Preprocessor)、ASP(Active Server Pages)、JSP(JavaServer Pages)进行一些技术
性的比较。
  Perl
  Perl(Practical Extraction and Report Language)是一种很古老的脚本语言。最初的Web应用大多是
用Perl编写的,Perl很像C语言,使用非常灵活,对于文件操作和处理具有和C语言一样的方便快捷。
  也正是因为Perl的灵活性和“过度”的冗余语法,也因此导致许多Perl程序的代码令人难以阅读和维护
,因此使用的人在逐渐减少,并且目前有被Python替代的可能。
  另外Perl对于CPU的消耗似乎较高,效率似乎有一些不足。
  Perl开发的成功案例:
  Movable Type ― 世界上使用最多的Blog系统之一,功能强大的足以和一个CMS系统相比拟。
  Awstats ― 非常经典的日志系统,速度极快,功能也非常强大。
  结论:Perl在部分应用中能发挥很大优势,但其维护性差使得其普及变得很困难。
  PHP
  PHP(Hypertext Preprocessor)是一种嵌入HTML页面中的脚本语言。它大量地借用C和Perl语言的语
法, 并结合PHP自己的特性,使Web开发者能够快速地写出动态产生页面。
  PHP是完全免费的开源产品,不用花钱,Apache和MYSQL也是用样免费开源,在国外非常流行,PHP和
MYSQL搭配使用,可以非常快速的搭建一套不错的动态网站系统,因此国外大多数主机系统都配有免费的
APACHE+PHP+MYSQL。通常认为这种搭配的执行效率比IIS+ASP+ACCESS要高,而后者的使用还必须另
外交钱给微软。
  PHP的语法和Perl很相似,但是PHP所包含的函数却远远多于Perl,PHP没有命名空间,编程时候必须努
力避免模块的名称冲突。一个开源的语言虽然需要简单的语法和丰富的函数,但PHP内部结构的天生缺陷导致
了PHP不适合于编写比小型业余网站更大的网站。
  PHP开发的成功案例:
  MediaWiki ― 著名的维基百科(Wiki)程序,如此庞大的条目居然只用PHP+MYSQL就能够支持,真是
不可思议。
  WordPress ― 著名的Blog系统,功能上丝毫不输于Movable Type,不少用户都纷纷从Movable Type转
移到了WordPress。
  结论:PHP因为结构上的缺陷,使的其只适合编写小型的网站系统。
  ASP
   ASP(Active Server Pages)微软的Windows IIS系统自带的脚本语言,利用它可以执行动态的Web服
务应用程序。ASP的语法非常类似Visual BASIC,学过VB的人可以很快上手,ASP也是这几种脚本语言中最简
单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。
  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
  ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而
ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统
和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不
错的选择。
  不过,正因为ASP很简单,所以单纯使用ASP所能完成的功能也是有限的,好在COM(Component
Object Model)技术拯救了ASP,微软提供了COM/DCOM技术,极大拓宽了ASP的应用范围,使得ASP几乎
具有无限可扩充性。
  结论:ASP简单而易于维护,是小型网站应用的最佳选择,通过DCOM和MTS技术,ASP甚至还可以完成
中等规模的企业应用。
  JSP
  JSP(JavaServer Pages)是Sun公司推出的一种动态网页技术。JSP技术是以Java语言作为脚本语言的
,熟悉JAVA语言的人可以很快上手。
  JSP本身虽然也是脚本语言,但是却和PHP、ASP有着本质的区别。PHP和ASP都是由语言引擎解释执行程
序代码,而JSP代码却被编译成Servlet并由Java虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生
。因此普遍认为JSP的执行效率比PHP和ASP都高。
  JSP在技术结构上有着其他脚本语言所没有的优势:JSP可以通过JavaBean等技术实现内容的产生和显示
相分离,并且JSP可以使用JavaBeans或者EJB(Enterprise JavaBeans)来执行应用程序所要求的更为复杂的
处理,进而完成企业级的分布式的大型应用。
  因此,不少国外的大型企业系统和商务系统都使用JSP技术,作为采用Java技术家族的一部分,JSP技术也
能够支持高度复杂的基于Web的应用。
  结论:对于脚本语言来讲,JSP还是拥有相当大的优势的,虽然其配置和部署相对其他脚本语言来说要复
杂一些,但对于跨平台的中大型网站系统来讲,基于JAVA技术的JSP(结合JavaBean和EJB)几乎成为唯一的
选择。
JSP技术特点JSP是基于Java Servlet以及整个Java体系的Web开发技术,利用这一技术可以建立先进、安全、
快速和跨平台的动态网站。在传统的网页HTML文件中加入Java程序片段和JSP标记,就构成了JSP网页。
Web服务器接收到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户
。程序片段可以操作数据库、重新定向网页以及发送 E-mail 等等,这就是建立动态网站所需要的功能。所有程
序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求很低。如图1所示,在
用户连接JSP网站时,用户请求网页,JSP页面独自响应请求,将用户对网页的请求转化为对数据的请求,通过
JavaBean处理请求并将返回的数据封装成HTML页面返回给用户。
JSP有许多优势:
1. 程序写一次,到处可以运行。JSP在设计时,充分考虑到应用平台的无关性。依赖于Java的可移植性,JSP得
到目前许多流行操作平台的支持,可在Apache、NetScape、IIS等服务器上执行。
2. 执行速度快。JSP页面只需编译一次转化为Java字节代码,其后一直驻留于服务器内存中,加快了对JSP页面
的响应速度。若不考虑JSP页面第一次编译所花的时间,则JSP的响应速度要比ASP快得多。
3. Java的优势。JSP技术是用Java语言作为脚本语言的。跨平台、成熟、健壮、易扩充的Java技术使得开发人
员的工作在其他方面也变得容易和简单。在Windows系统被怀疑可能会崩溃时,Java能有效地防止系统崩溃。
Java语言通过提供防止内存泄漏的方法,在内存管理方面大显身手。加之,JSP为应用程序提供了更为健壮的意
外事件处理机制,充分发挥了Java的优势。
JSP技术难点
1. 连接数据库
数据库连接对动态网站来说是最为重要的部分,在与后端数据库连接时可以采用ODBC或JDBC技术。虽然
ODBC作为传统的连接数据库的手段是一种选择,但是ODBC有以下致命缺陷,从而使它无法胜任JSP的请求:
(1) ODBC是C语言实现的API,从Java程序调用本地的C程序会带来一系列类似安全性、完整性、健壮性方面的
问题。
(2) 其次,完全精确地实现从C代码ODBC到Java API 翻译的ODBC不会令人满意,因为在Java中没有指针,而
ODBC中大量地使用了指针,包括极易出错的空指针“void *”。
(3) 考虑到平台移植性,在开发JSP程序中使用ODBC会带来负面影响,使得代码不适合于移植。
为了使程序在具有安全性、完整性、健壮性的同时, 可以方便地移植,采用JDBC连接数据库更合适一些。
JDBC是一种可用于执行SQL语句的Java API,它由一些Java语言写的类、界面组成,使开发人员可以用纯
Java语言编写完整的数据库应用程序。通过使用JDBC,可以很方便地将SQL语句传送到几乎任何一种数据库。
也就是说,可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQL
Server。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。
在本地数据库程序使用Microsoft的Access等数据库时,可以使用Sun公司开发的JDBC-ODBC桥,借用此技术
JSP程序就可以访问带有ODBC驱动程序的数据库。这样既保留JDBC的优点,又可以使用Microsoft提供的
ODBC数据源与Access连接。不管对方是何种数据库,只要有ODBC接口就可以直接使用JDBC-ODBC桥与数据
库连接,而无需因为后端数据库的改变而改动相应的程序代码,实现了应用层与数据库层的完美分离。如果需
要变后端数据库为MySQL,只需在ODBC数据源中安装MySQL的驱动程序之后,就可以直接使用MySQL数据
库了。
2. 内建的组件
在实现网站的时候,由于客观需要,为了方便区分本地局域网用户与远端连上来的用户,并提供相应的权限
,可以采用内建的组件Request来捕获每一个连到服务器上的用户的IP地址,通过比较之后给出相应的权限。
这样做到本局域网内用户可以使用网站内所有公开的和不对外公开的资源。还可以将现有的方法加以改进,将
各种IP地址输入到数据库中并且赋予不同的IP地址不同的权限,以完整地控制用户使用网站资源。
会话状态维持是Web应用开发者必须面对的问题。为了了解用户是否还在线,使用内建的Session组件,通过
给每个登录用户一个Session变量,可以在用户非正常离开网站之后,关闭该用户使用的资源,达到节省内存
,提高服务器性能的目的。
在JSP中还提供了Cookie类,其构造器有两个参数,分别代表Cookie的名称和值。Cookie类中提供了各种方
法设置Cookie的属性,如通过setMaxAge方法可以设置Cookie的生存时间。若生存时间为负值,代表浏览器
关闭Cookie,即消失; 生存时间为0,代表删除Cookie; 生存时间为正数,代表Cookie存在多少秒。可以用
Cookie临时保存用户的账号和口令,JSP可随时读取,验证用户的合法性。可以将用户的浏览状态保存在
Cookie中,下次用户再访问网页时,由JSP向浏览器显示个性化页面。
3. 转换Unicode编码
在许多JSP页面的调试过程中都碰到过由于汉字编码与Unicode编码转换引起的问题,如在浏览器中看到的
JSP页面中的汉字都是乱码、JSP页面无法正常显示汉字、JSP不能接收表单提交的汉字、JSP数据库读写无法获
得正确的内容等等,这是因为现在大部分具有国际化特征的软件核心字符处理都是以Unicode为基础的,在软
件运行时根据当时“Locale/Lang/Codepage”设置确定相应的本地字符编码设置,并依此处理本地字符,所
以应该在处理过程中实现Unicode和本地字符集的相互转换,甚至以Unicode为中介的两个不同本地字符集的
相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可
接受的内容。
由于IE默认字符集为GB2312,然而Windows默认为GBK,Java则默认为Unicode,所以如果不通过一定的转
换,直接在GB2312字符集上显示从GBK或Unicode得到的页面将是一片乱码。Java 语言采用Unicode处理字
符,但从另一个角度来说,在Java程序中也可以采用非Unicode,重要的是保证程序入口和出口的汉字信息不
失真。如完全采用ISO-8859-1来处理汉字也能达到正确的结果,经过转换之后并将网页字符集强制设为
GB2312字符集显示,就能够正常显示汉字了。 2008-10-30 22:18:06
疯狂代码 http://www.crazycoder.cn/