1.3 Web应用程序开发
由于技术的进步和网络环境的进化,Web应用程序开发的技术也在不断地进步。在Web应用程序开发的过程中,存在着不少争议。当然,这些争议都是开发人员对各种技术的看法不同造成的。接下来将简单介绍这方面的内容,使读者对技术进化过程中的一些问题有所了解。
1.3.1 C/S与B/S之争
在前面的章节中已经介绍过,在Web应用程序的开发中,存在着两种开发模式,一种是传统的C/S架构,另一种是近些年兴起的B/S架构。
由于硬件成本的降低,再加上应用系统复杂程度的提高,Web应用程序的开发逐渐转向到C/S架构。所谓的C/S架构,就是客户端/服务器端的架构形式。在这种架构方式中,多个客户端围绕着一个或者多个服务器,这些客户端安装在客户机上,负责用户业务逻辑的处理,在服务器端仅仅对重要的过程和数据库进行处理和存储,每个服务器端都分担着服务器的压力,这些客户端可以根据不同的用户的需求进行定制。C/S这种架构方式的出现大大提高了Web应用程序的效率,给软件开发带来革命性的飞跃。
但是,随着时间的推移,C/S架构的弊端开始慢慢显现。在C/S架构中,系统部署的时候需要在每个用户的机器上安装客户端,这样的处理方式带来很大的工作量,而且在C/S架构中,软件的升级也是很麻烦的一件事情,哪怕是再小的一点改动,都得把所有的客户端全部修改更新。这些致命的弱点决定了C/S结构的命运。在C/S架构模式流行一段时间以后,逐渐被另一种Web应用系统的架构方式所代替。这种新的Web软件架构的模式就是B/S。
B/S架构就是浏览器/服务器的架构形式。在这种架构方式中,采取了基于浏览器的策略,简化了客户端的开发工作。在B/S架构的客户机中,不用安装客户端软件,只要有通用的浏览器工具,就可以访问服务器端提供的服务。在各种操作系统中,都提供了浏览器工具,这些浏览器工具都是遵循着相同的协议规范,所以B/S结构的客户端在各种系统环境中都已经实现。而且,在浏览器访问服务器的过程中,使用的是HTTP协议,所以这种方式非常容易就可以穿过防火墙的限制。
而且在B/S结构的服务器端,也不用处理通信相关的问题。这些问题都由Web服务器提供,Web服务器处理用户的HTTP请求,开发人员只需要专注开发业务逻辑功能即可。总之,Web服务器完成了底层的操作,给应用软件的开发提供了基础的通信服务,从而减轻了开发人员重复开发通信相关的功能,从而提高了开发的效率,降低了B/S结构应用程序开发的难度。
使用B/S架构,不仅减轻了开发者的任务,而且软件的部署和升级维护也变得非常简单。只需要把开发的Web应用程序部署在Web服务器中即可,而客户端根本不需要做任何改动,这是在C/S架构中无法实现的。
但是B/S架构也有自身的一些缺点,例如界面元素单调。在B/S结构的程序中,失去了桌面应用程序丰富的用户界面,程序在交互性上没有C/S架构那么人性化。
在C/S和B/S两种架构之间,并没有严格的界限,两种架构没有好坏之分,使用这两种架构都可以实现系统的功能。开发人员可以根据实际的需要进行选择。例如需要丰富的用户体验,那就选择C/S架构。在目前的网络游戏中,基本都是选择C/S架构。如果更偏重的是功能服务方面的实现,就需要选择B/S架构,这也正是目前绝大部分管理应用系统采用的软件架构方法。
1.3.2 动态页面语言对比
在互联网发展的最初阶段,所有的网页内容都是静态的HTML网页。在这种情况下,网站所能实现的任务仅仅是静态的信息展示,而不能与客户产生互动。当然这样的网站是不能满足用户不同的需要的。在现实生活中,用户的需要总是各种各样的,这就需要网站或者是Web应用程序具有收集并处理响应用户需要的功能,而静态的HTML是不能满足这种需要的。为了满足这种特殊的需要,就有了后来一系列的动态页面语言的出现。
所谓的动态页面是指可以和用户产生交互,能根据用户的输入信息产生对应的响应。能满足这种需求的语言就可以称为动态语言。
最初,动态网页技术主要使用CGI,现在常用的动态网页技术有ASP、JSP、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 Server、MySQL、Oracle、Sybase等。这种内置的方法使PHP中的数据库操作变得异常简单。而且PHP程序可以在IIS和Apache中运行,提供对多种操作系统平台的支持。
但是PHP也存在一些劣势,PHP的开发运行环境的配置比较复杂,而且PHP是开源的产品,缺乏正规的商业支持。这些因素在一定程度上限制了PHP的进一步发展。
总之,各种动态语言都有着自身的优势和劣势,只有根据客户的需求来选择具体的语言。只要能够保证系统的性能和功能,选择什么语言是无关紧要的。
1.3.3 .NET与J2EE之争
自从.NET和J2EE推出以来,对J2EE和.NET的比较已经不是一天两天的事了。钟情于Windows的用户会选择.NET,而选择UNIX、Linux的用户会更钟情于J2EE,其实这两种技术都有各自的优势和不足。下面简单分析一下这两种技术自身的优劣。
1. .NET的优点
在Windows平台的应用程序中,对用户界面的要求比较高,所以.NET提供了便捷的开发环境和工具。在Visual Studio中,用户的界面都可以通过简单的拖曳来完成,这种可视化的编程方式在Java中还不是很成熟,.NET的可视化编程环境是得到一些程序员支持的原因之一。
.NET运行在Windows操作平台中,而且和Windows一样,都是微软开发的产品。所以,在.NET中可以访问到操作系统中的各个细节,因此可以调用系统中的各种功能。对于J2EE的程序来说,这样的操作就很难实现了。在Java中无法访问到操作系统底层的细节。
.NET的优点还有很多,在这里不再一一列举。
2. .NET的局限
.NET只能运行在Windows平台中,不能跨平台,这是.NET最大的一个劣势。另外,.NET是微软公司的产品,所有的开发设计仅仅局限在一个公司之内,而Java虽然是由Sun公司开发,但是在发展的过程中得到了类似IBM、BEA这样知名公司的支持,而且还有很多开源力量的支持。这些都是.NET中不可能拥有的。
3. J2EE可以弥补.NET的局限
在J2EE中,可供使用的类库是非常广泛的,并且都是非常成熟的。在Java发展的十多年中,这些类库的功能经过了大量的检验和测试,已经十分成熟。而且在Java语言的跨平台特性在这十几年的发展中也经受住了考验。在J2EE领域中,有很多开源的资源可供使用,例如Tomcat、JBoss这样的Web服务器,还有Spring、Hibernate、Struts这样的开源框架,这些资源都是Java社区中开源力量的贡献。这些资源同样是在.NET中无法享受的。
.NET和J2EE都是企业级应用系统的解决方案,这两种解决方案都可以很好地实现应用系统的功能。这两种解决方案之间并没有非常明显的优劣区别。关于.NET和J2EE谁好谁坏类似问题的讨论是没有意义的,在实际的开发过程中,应该根据具体的需要来选择使用哪种技术。例如用户只要求在Windows系统中使用,并没有要求跨平台,那选择.NET和J2EE都是可以的;如果用户要求一定在Linux平台中部署应用系统,那J2EE就是一种很好的选择。所以选择.NET还是J2EE是由需求而定的,两种技术没有优劣之分。