预见未来!深度分析php、asp、jsp技术,谁才是未来的趋势?

对于大多数编程人员来说,学习编程语言选择哪个分支,哪门语言学习,还是非常关心的。我们会发现,很多公司,程序员或者学习者都在追逐时下最热门的语言,一方面热门语言需求量大,工作好找,收入也还不错,另一方面就是热门语言在未来的几年不至于彻底打入冷宫,这样相应的程序员不至于有了大量的积累学习而被市场淘汰。所以了解热门语言,把握一定的趋势非常重要。
大家都知道,php是脚本语言,专门拿来做网页的,asp是动态服务器页面,由微软支持,jsp则由java支持。就其背景,相信会有不少盖茨粉会支持微软,认为asp会是未来的趋势。然而考虑到php、asp、jsp三张技术的市场份额,优缺点,区别,性能等综合因素,一些技术人员或许会有不一样的答案。那么php、asp、jsp三种技术,谁才是未来的趋势呢?
简介
php是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用c,java和perl语言的语法, 并耦合php自己的特性,使web开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,php是完全免费的,不用花钱,你可以从 php官方站点(http: //php)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
asp全名active server pages,是一个web服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的web服务应用程序。asp采用脚本语言vbscript(java script)作为自己的开发语言。
jsp是sun公司推出的新一代网站开发语言,sun公司借助自己在java上的不凡造诣,将java从java应用程序和java applet之外,又有新的硕果,就是jsp,java server page。jsp可以在serverlet和javabean的支持下,完成功能强大的站点程序。
技术特点:
php:
数据库连接
php 可以编译成具有与许多数据库相连接的函数。php与mysql是现在绝佳的群组合。你还可以自己编写外围的函数去间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松地修改编码以适应这样的变化。phplib就是最常用的可以提供一般事务需要的一系列基库。但php提供的数据库接口支持彼此不统一,比如对oracle, mysql,sybase的接口,彼此都不一样。这也是php的一个弱点。
asp:
1、使用vbscript 、 javascript等简单易懂的脚本语言,结合html代码,即可快速地完成网站的应用程序。
2、无须compile编译,容易编写,可在服务器端直接执行。
3、使用普通的文本编辑器,如windows的记事本,即可进行编辑设计。
4、可使用服务器端的脚本来产生客户端的脚本。
5、与浏览器无关(browser independence), 客户端只要使用可执行html码的浏览器,即可浏览active server pages所设计的网页内容。active serverpages 所使用的脚本语言(vbscript 、 jscript)均在web服务器端执行,客户端的浏览器不需要能够执行这些脚本语言。
6、active server pages能与任何activex scripting语言兼容。除了可使用vb script或jscript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其它脚本语言,譬如rexx 、perl 、tcl等。脚本引擎是处理脚本程序的com(component object model) 对象。
7、activex server components(activex 服务器组件 )具有无限可扩充性。可以使用visual basic 、java 、visual c++ 、cobol等程序设计语言来编写你所需要的activex server component 。
jsp:
1、将内容的产生和显示进行分离
使用jsp技术,web页面开发人员可以使用html或者xml标识来设计和格式化最终页面。使用jsp标识或者小脚本来产生页面上的动态内容。产生内容的逻辑被封装在标识和javabeans群组件中,并且捆绑在小脚本中,所有的脚本在服务器端执行。如果核心逻辑被封装在标识和beans中,那么其它人,如web管理人员和页面设计者,能够编辑和使用jsp页面,而不影响内容的产生。在服务器端,jsp引擎解释jsp标识,产生所请求的内容(例如,通过存取javabeans群组件,使用jdbc技术存取数据库),并且将结果以html(或者xml)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于html的web浏览器的完全可用性。
2、强调可重用的群组件
绝大多数jsp页面依赖于可重用且跨平台的组件(如:javabeans或者enterprise javabeans)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者用户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种群组织在他们现有的技能和优化结果的开发努力中得到平衡。
3、采用标识简化页面开发
web 页面开发人员不会都是熟悉脚本语言的程序设计人员。javaserver page技术封装了许多功能,这些功能是在易用的、与jsp相关的xml标识中进行动态内容产生所需要的。标准的jsp标识能够存取和实例化 javabeans组件,设定或者检索群组件属性,下载applet,以及执行用其它方法更难于编码和耗时的功能。通过开发定制化标识库,jsp技术是可以扩展的。今后,第三方开发人员和其它人员可以为常用功能建立自己的标识库。这使得web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。 jsp技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用java技术家族的一部分,以及 java 2ee的一个成员,jsp技术能够支持高度复杂的基于web的应用。由于jsp页面的内置脚本语言是基于java程序设计语言的,而且所有的jsp页面都被编译成为java servlet,jsp页面就具有java技术的所有好处,包括健壮的存储管理和安全性。作为java平台的一部分,jsp拥有java程序设计语言“一次编写,各处执行”的特点。随着越来越多的供货商将jsp支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。
应用范围:
php3可在windows,unix,linux的web服务器上正常执行,还支持iis,apache等一般的web服务器,用户更换平台时,无需变换php3代码,可即拿即用。
asp是microsoft开发的动态网页语言,也继承了微软产品的一贯传统,只能执行于微软的服务器产品,iis(internet information server) (windows nt)和pws(personal web server)(windows 98)上。unix下也有chilisoft的组件来支持asp,但是asp本身的功能有限,必须通过asp+com的群组合来扩充,unix下的com 实现起来非常困难。
jsp 同php3类似,几乎可以执行于所有平台。如win nt,linux,unix。在nt下iis通过一个外加服务器,例如jrun或者servletexec,就能支持jsp。知名的web服务器 apache已经能够支持jsp。由于apache广泛应用在nt、unix和linux上,因此jsp有更广泛的执行平台。虽然现在nt操作系统占了很大的市场份额,但是在服务器方面unix的优势仍然很大,而新崛起的linux更是来势不小。从一个平台移植到另外一个平台,jsp和javabean甚至不用重新编译,因为java字节码都是标准的与平台无关的。
性能比较:
有人做过试验,对这三种语言分别做回圈性能测试及存取oracle数据库测试。在循环性能测试中,jsp只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而asp、php测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考phplib)。 数据库测试中,三者分别对 oracle 8 进行 1000 次 insert,update,select和delete: jsp 需要 13 秒,php 需要 69 秒,asp则 需要 73 秒。
前景分析:
目前在国内php与asp应用最为广泛。而jsp由于是一种较新的技术,国内采用的较少。但在国外, jsp已经是比较流行的一种技术,尤其是电子商务类的网站,多采用jsp。采用php的网站如新浪网(sina)、中国人(chinaren)等,但由于 php本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。首先,php缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而php则缺乏这种支持。还有上面提到过的一点,php提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。
asp和jsp则没有以上缺陷, asp可以通过microsoft windowsd的com/dcom获得activex规模支持,通过dcom和transcation server获得结构支持;jsp可以通过sun java的java class和ejb获得规模支持,通过ejb/corba以及众多厂商的application server获得结构支持。
由于php,asp的局限性,jsp作为一个新技术,必然会是未来发展的一个趋势。
#java代码查错#
class something {
final int i;
public void dosomething() {
system.out.println(i = + i);
}
}和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?
答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为final int i = 0;。