路在何方,Java后端开辟入门

PHP4:奇迹背后

前言:在进入Java后端的修炼之路之前,让我们先认清一些可能模糊的概念,以及与Java语言同在的其他语言的一些小知识。下面开始吹吹水,可以快速看看:

在开发动态网站时,离不开服务器端技术,服务器端技术主要有CGI、ASP、PHP、ASP.NET和JSP。

1995年时,Rasmus在用PHP写他的个人主页;今天,PHP成为风靡全球的脚本语言,越来越多的站点选择使用PHP,连Yahoo都放弃了自己的脚本而改用PHP支持它的网站。可以说,PHP是一个奇迹。我一直认为,任何奇迹背后都有它的原因。现在,就让我们透过这个奇迹,来看看PHP的成功之道。

一、一些概念:

  1. 经典框架组合 SSH(structs + Spring +
    Hibernate)比较新潮的组合SSJ(Struts2 + Spring2 + JPA)
  2. MVC(Model- View- Control)三层模式, Control层又分为两层:DAO层与
    Service
  3. J2EE:Java的企业版本,Sun公司提出
  4. J2ME:针对嵌入式设备,如手机等。J2ME出现之前,
    嵌入设备只能用C/C++方式实现编程。

1、CGI

CGI(Common Gateway Interface
通用网关接口)是最早用来创建动态网页的技术,它可以使浏览器与服务器之间产生互动。它允许使用不同语言来编写适合的CGI程序,该程序被放在Web服务器上运行。当客户端发出请求给服务器时,服务器根据用户请求建立一个新的进程来执行指定的CGI程序并将执行结果以网页形式返回给客户端的浏览器上显示出来。虽说CGI是当前应用程序的基础技术,但这种技术的编制比较困难,且效率低下,因为每次页面被请求时,都要求服务器重新将CGI程序编写成可执行的代码。在CGI中最常用的语言有C/C++、Java和Perl。

1 简单易用

二、Web服务器汇总

  1. IIS:微软提供的一种Web服务器。本身支持ASP,加上插件则支持PHP。
  2. Apache服务器:Apache基金组织提供的一种Web服务器。特长是处理静态页面(处理静态页面的效率高)
  3. Tomcat服务器:也是Apache基金组织提供的一种Web服务器,提供对JSP和Servlet的支持,通过插件安装同样支持PHP。Tomcat是一个轻量级的Java
    Web容器,像EJB这样的服务在Tomcat中无法运行。
  4. JBoss:开源的重量级的Java
    Web服务器。JBoss中提供了对J2EE各种良好支持,而且JBoss通过了Sun公司的J2EE认证,是Sun公司认可的J2EE容器。
  5. BEA 的 Weblogic 和 IBM 的 WebSphere 等 J2EE容器。

2、ASP

ASP(Active Server Page
动态服务页面)是一种很广泛的开发动态网站的技术。它通过在页面代码中嵌入VBScript或JavaScript脚本语言来生成动态的内容。但必须得在服务器端安装了适当的解释器后,才可以通过调用此解释器来执行脚本程序,然后将执行结果与静态内容部分结合并传送到客户端浏览器上。对于一些复杂的操作,ASP可以调用存在于后台的COM组件来完成,所以说COM组建无限地扩充了ASP的能力,正因为如此一来本地的COM组件,使得它主要用于Windows
NT平台中。它的优点是简单易学,并且ASP是与微软的IIS捆绑在一起,在安装WIndows操作系统的同时安装上IIS就可以运行ASP程序了。

PHP的入门门槛很低,它对使用者的要求微乎其微。学过C语言的人,使用PHP几乎不需要什么时间。它们的语法是如此相似,以至于我常常想,是不是在C语言变量前加个$就能改成PHP。这使得大量C程序员在网络脚本中选择了PHP。另外,比起ASP的组件系统和Java庞大的类库来,PHP的函数库要好学多了。在编程风格上,PHP更是自由,你可以使用N种风格来写你的脚本程序。这些特性使得PHP成为初学者的首选语言。抢占初学者市场是很重要的策略。如同任何人都会对自己的初恋记忆犹新一样,人们往往会对最初学习的语言有很深的感情。即使后来自己成长了,改用其他语言了,还是会时时记起最初学习的语言。在这点上,PHP做得很出色。

三、动态页面语言的对比

详细的编程语言历史,可看本人的文章:《编程语言历史》
(1)CGI

在互联网发展的早期,动态网页技术主要使用 CGI(共用网关接口),CGI
程序被用来解释处理表
单中的输入信息,并在服务器中产生对应的操作处理,或者是把处理结果返回给客户端的浏览器,从而
可以给静态的 HTML 网页添加上动态的功能。但是由于 CGI
程序的编程比较困难、效率低下,而且修
改维护也比较复杂,所以在一段时间以后,CGI
逐渐被其他新的动态网页技术所替代。

(2)ASP

ASP 是微软公司推出的一种动态网页语言,它可以将用户的 HTTP 请求传入到 ASP
的解释器中, 这个解释器对这些 ASP
脚本进行分析和执行,然后从服务器中返回处理的结果,从而实现了与用户交
互的功能,ASP
的语法比较简单,对编程基础没有很高的要求,所以很容易上手,而且微软提供的开发
环境的功能十分强大,这更是降低了 ASP 程序开发的难度。但是 ASP
也有其自身的缺点。ASP 在本质
上还是一种脚本语言,除了使用大量的组件,没有其他办法提高效率,而且 ASP
还只能运行在 Windows 环境中,这样 Windows 自身的一些限制就制约了 ASP
的发挥,这些都是使用 ASP 无法回避的弊端。

(3)JSP

JSP(Java Server
Page)是SUN公司开发的一种服务器端的脚本语言,自从1999年推出以来,逐
步发展为开发 Web 应用一项重要技术。JSP 可以嵌套在 HTML
中,而且支持多个操作系统平台,一个 用 JSP 开发的 Web
应用系统,不用做什么改动就可以在不同的操作系统中运行。
JSP 本质上就是把 Java 代码嵌套到 HTML 中,然后经过 JSP
容器的编译执行,可以根据这些动态代码的运行结果生成对应的 HTML
代码,从而可以在客户端的浏览器中正常显示。
由于 JSP 中使用的是 Java 的语法,所以 Java 语言的所有优势都可以在 JSP
中体现出来,尤其是 J2EE 中的强大功能,更是成为 JSP 语言发展的强大后盾。

(4)PHP

PHP 是和 JSP 类似,都是可以嵌套到 HTML 中的语言,不同之处在于,PHP
的语法比较独特,在 中混合了 C、Java 等多种语法中的优秀部分,而且 PHP
网页的执行速度要被 CGI 和 ASP 等语言要快很
多。在PHP中,提供了对常见数据库的支持,例如SQL
Server2000、MySQL、Oracle、Sybase等,这 种内置的方法使 PHP
中的数据库操作变得异常简单。而且 PHP 程序可以在 IIS 和 Apache
中运行,提供 对多种操作系统平台的支持。
 但是 PHP 也存在一些劣势,PHP 的开发运行环境的配置比较复杂,而且 PHP
是开源的产品,缺乏 正规的商业支持。这些因素在一定程度上限制了 PHP
的进一步发展。

3、PHP

PHP(Hypertext Preprocessor
超文本预处理器)的语法类似于C,并且混合了Perl、C++和Java的一些特性,它是一种开源的Web服务器脚本语言,与ASP一样可以在页面中加入脚本代码来生成动态内容。对于一些复杂的操作可以封装到类或函数中。在PHP中提供了许多已经定义好的函数,例如提供的标准数据库接口,数的数据库连接方便,扩展性强。PHP可以被多个平台支持,但被应用最广泛的还是UNIX/Linux平台。由于PHP本身的代码对外开放,经过了许多软件工程师的检测,因此,该技术具有公认的安全性能。

4、ASP.NET

这种建立动态Web应用程序的技术,是.NET框架的一部分,可以使用任何.NET兼容的语言来编写ASP.NET应用程序。使用VisualBasic.NET,C#,J#,ASP.NET
页面(Web Forms)进行编译可以提供比脚本语言更出色的性能。Web
Forms允许在网页基础上建立强大的窗体。当建立页面时,可以使用ASP.NET服务端控件来建立常用的UI元素,并对他们编程来完成一般的任务。这些控件允许开发者使用内建可重用的组建和自定义组建来快速建立Web
Forms,使代码简单化。

2 剪裁得当

5、JSP

JSP(Java Server
Pages)是以Java为基础开发的,所以它沿用Java强大的API功能,JSP页面中的HTML代码用来显示静态内容部分,嵌入到页面中的Java代码与JSP标记来生成动态内容部分。JSP可以被预编译,从而提高了程序的运行速度。另外JSP开发的应用程序经过一次编译后,可以随时随地地运行,所以在大部分系统平台中,代码无需做修改就可以在支持JSP的任何服务器中运行。

PHP开发组是最了解网络的一群人,他们非常清楚用户要的是什么。PHP就是要做一个出色的网络脚本语言,而且,它只是要做一个网络脚本语言。PHP提供的函数集在网络方面相当强大,而且重点均专注于网络应用。像PHP中的无组件文件上传,超多数据库支持等特性都表现出这个特点。顺便说一句,PHP甚至支持ACCESS数据库。专注使得PHP在网络上表现出极其优秀的性能。有失才能有得。

3 支持强大

PHP有强大的OpenSource团体支持,在网络上有数以万计的开源代码。你可以整合几个现有程式来实现你的应用,也可以分析大师级的代码来得到提高。PHP还有很多扩展性的项目来增强PHP在某个方面的功能。像注重编程规范化和代码重用的PEAR,提供可编译模板技术的Smarty,甚至开发桌面程序的GTK。

分析完这几个理由,我们可以看出,PHP的成功得益于PHP开发组的战略眼光。PHP提供了一个最小工作集,使用户能用最简单的方式高效地完成自己需要的应用。这正是初学者需要的。然后它通过方便的扩展来提供各个方面的解决方案,这样,你只需要学你要用到的那个领域的东西。当你涉及的领域越来越多时,你的水平也随之提高,当你熟悉了大多领域时,回头看看,会发现不知不觉已到山腰。PHP也提供了我们一种学习态度。

ASP.net+J2EE:风雨欲来

网络脚本界的革新浪潮由Microsoft的ASP.net首先发起。在ASP.net中,有一个很吸引人的东西——事件驱动机制。这在桌面编程中是很普通的概念,而在脚本编程中事件驱动意味着对服务器端的脚本(如PHP、JSP、ASP)和客户端的脚本(如JavaScript和VbScript)进行封装,使之协同工作。这样一来,编程就会变得异常方便。在.net环境中的事件驱动还有一个优势,就是你甚至可以不会任何服务器端脚本和客户端脚本,因为在ASP.net中,是可以直接使用C#这样的语言的——连$都不用加。这为MS阵营的传统程序员转向网络开发铺平了道路,同时,也使PHP在初学者市场上受到很大的打击。可以预见,以后的传统程序员转向PHP的将大为减少。不过ASP.net最大的问题在于它只能在Windows上运行,而现在大陆正在大力发展Linux。这使得PHP的生存空间似乎宽了点,但是——让我们来看看Java吧。

Java也是一个奇迹,1995年发布第一个版本,现在形成三个版本,分别覆盖嵌入式系统(J2me)桌面程序(J2se)和服务器(J2ee)三大应用领域。更重要的是,Java得到了绝大多数程序员的认可,现在世界上最出色的计算机书籍多是以C++或者Java作为描述语言的。Java几乎像C一样,成为一种信仰。所以,我们不要妄想Java阵营的程序员会转向PHP。同时,在同是开源和跨平台的Java面前,PHP丢掉了不少优势。J2ee中的JSP又在初学者市场对PHP造成相当的压力。

在曾经使PHP成功的初学者市场、易用性和开源支持等方面都受到挑战,而随着机器性能的不断提高,大家对效率的要求渐渐降低的情况下,可以说,PHP要在ASP.net和J2EE的狭缝中生存并壮大,是一件很不容易的事情。

而PHP本身还有不少问题。像低层用户过多。大量的开发者处于入门阶段,不知道如何提高自己,导致大量开源代码不规范和低效率,而又会又下一批初学者从这些糟糕的代码中学习,如此递归。另一方面,高阶用户却因为PHP的面向对象特性不完整等原因而不得不转向其他语言以开发大型应用。

PHP5:浓浓咖啡味

PHP开发组在今年年中发布了PHP5的BETA1,我们可以从中看见PHP的反击。首先,PHP4的开发仍然马不停蹄,而且我们可以肯定,PHP4的开发还将持续很长一段时间。这样做的目的是巩固既有用户,同时在将来的PHP4版本中逐渐融合部分PHP5的新特性,实现PHP4到PHP5的平滑过渡。

再来看PHP5的变化。在PHP5中,我们看到了太多Java的影子。OO体系几乎是COPY的Java的,这保证了PHP高阶用户不流失,使得他们能方便的使用最新的技术体系来架构自己的应用。另一方面,也为Java程序员使用PHP提供了方便,虽然这样的情况可能比较少。在完善了OO体系后,PHP具备了真正进入企业级市场的能力。然后PHP5也添加了不少自己的东西,像__get,来使这个体系更易用。不知道的是,这杯cappuccino是否会像Java般受欢迎呢?

从PHP5的改变中,我们看出了PHP将来的方向。一是和JSP竞争,争取在某一些方面取代JSP,成为粘合JavaBeans和Servlet的胶水。这要求PHP和Java之间建立更为紧密的关系。Zend小组正在参与JSR规范的指定。这个规范将使得你可以在PHP中直接new一个Java对象并调用它的方法。这样也能使PHP更快的进入企业级市场。另外,如果PHP编写的脚本能被直接编译成Binary
Code在Jvm上运行的话,PHP的前景会好很多。另一个方向是做Java和.net间的集成,在一些大型的应用中整合已有资源。PHP4中我们已经可以调用com组件和Java对象,相信在将来PHP5将对此提供更多的支持。

不管怎么样,无论是和J2ee和.net竞争还是融合,PHP要走的,将是一条满是荆棘的路。不过既然PHP已经一路风雨地走到了今天,我们有什么理由不相信它能走得更远呢?

Best Wishes, PHP.

 

PS
这只是Easy对PHP将来发展的一点个人看法,可能不是很成熟,只是给大家一点参考。