现在开发网站,好像都是流行用php,那javaweb一般用在哪里呢它们之间的区别和优劣势在哪里呢
现在市场上的oa基本上可归结为两大阵营,即php阵营和java阵营。但对接触oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异。其实,PHP+MYSQL不值钱不仅仅局限于oa软件,而是整体上PHP+MYSQL开发的软件都不如java开发的软件值钱。为什么PHP+MYSQL的OA为什么不值钱呢首先得明白php和java之间的差异才行。
1、系统的技术架构比较
分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题割裂开来,易于控制、易于延展,更易于分配资源。PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就十分强大,可以实现多层的网络架构。运用MVC的设计模式,可使oa系统具有更加高效、合理的系统架构。技术架构的落后,使运用php编写的oa软件系统先天不足,而后天又无法补足其先天上的劣势。使得系统在可拓展性、需求应变性上与JAVA编写的oa软件系统的差距越来越大。架构的差距,注定了php做的oa充其量是个小家碧玉,始终无法和java这种大家闺秀同台竞技。
2、数据库访问比较
PHP可编译成具有与许多数据库相连接的函数。将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。但PHP提供的数据库接口支持彼此不统一,比如对Oracle,MySQL,Sybase的接口,彼此都不一样。由于PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
而Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库,访问数据库的接口比较统一。如果同样是将开发的web应用从MYSQL数据数转到ORACLE数据,PHP需要做大量的修改工作,而且比较繁琐。但JAVA开发的便只需要很少的更改便能实现。
数据库访问方式的差异,奠定了php开发出的oa和java开发出来的oa是马车和火车的差距,前者只能亦步亦趋而且额度有限,后者却是工业化的结晶,不仅能够包容万物而且速度上稳步提升。
3、安全性对比
在同是开源和跨平台的java面前,php丢掉了很多的优势。在代码的安全性上尤为突出。php的开发程序在别人拿到代码后,可以很容易的进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。加之系统架构的优势,在安全性上php和java是相去甚远。
如果非要将php和java在安全性上做个比较的话,同一个小偷光顾php那是随便拿来随便改,想拿什么拿什么,拿的高兴还能大笔一辉某某到此一游。而光顾java的时候,便会发现警察把守,内设自动报警装置,即便突破重重阻扰后进入居室。那值钱的东西都放在加密后的保险柜中,只能望洋兴叹、铩羽而归。
4、前瞻性和拓展性
从整体来说,php适用于中小型系统,而java适用于大型系统。Php能够将单一的事件做好,但却不适合完成集成度较高的多项并发事件。为什么说php适合中小型系统而不适合做大系统呢
首先,php缺乏多层结构支持。而对于大型的系统负荷站点,只能采用分布计算。将数据库、应用逻辑层和表示逻辑层彼此分开,并将同层的根据流量分开,组成二维数组。而php恰恰缺乏这种支持。
其次,PHP提供的数据库接口不统一,要将多个不同的数据库数据统一需要花费很大的力气。而JAVA则没有这种缺陷,可通过SUNJava的JavaClass和EJB获得规模支持,通过EJB/CORBA以及众多厂商的ApplicationServer获得结构支持。如IBM的E-business,它的核心是采用JSP/Servlet的WebSphere,是通过CGI来提供支持的。
如果将Php比作将才,具备独挡一方的能力。那么java便是帅才,具有较好的前瞻性和拓展性,整体布局和协同能力强。能够指挥千军万马,最后逐鹿中原。
5、开发成本比较
既然php在诸多方面都不如java优异,那么php开发出的oa产品何以与java产品竞争呢在于Php阵营普遍走的是低端路线,而java阵营走的是中高端路线。两者之间交的区域较小。
软件价格的高低很大程度上和自身成本和功能相挂钩。php的入门门槛较低,绝大多数学过c的程序员都很容易转型为php程序员,这使得php程序员的泛滥成灾的同时,低成本的php软件产品也层出不穷。以PHP最经典的组合PHP+MySQL+Apache为例,由于所有软件都是开源免费的,所以投入并不高。
而java开发需要特定的环境,成长为一个合格的java程序员需要一定的时间,java程序员的成本也是php成本的几倍。Java的web应用服务器免费的有Tomcat、JBoss等,而要想具有很好的商业化服务便必须选用WebSphere和Weblogic。这其中投入的成本无形中便超是php成本的N倍。所以,java开发oa的成本要远远高于php开发出来的同类软件产品。但也正由于java开发的成本较高,很难实现抄袭和短期内逾越的可能,也使得java用开发出的产品门槛更高。
不怕不识货,就怕货比货。Php开发出来的产品也能用,但是和java开出的同类产品是没法比较的。正因为php开发的产品整体性能和java开发的相去甚远,所以php运用低成本的低价优势和同类的java产品抗争,以价格落差来平衡购买者的心态。所以,PHP+MYSQL的OA不值钱也就不足为怪了
第二种
比较PHP和JSP这两个web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:
一、语言比较
Php是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。
Java首先要编译成字节码class文件,然后在java虚拟机上解释执行。Java的web开发首先最容易想到的就是JSP(现在已经到JSP20),原来的java的web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。
Java的web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。
二、数据库访问比较
Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。
三、系统设计架构比较
采用Java的web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。
四、跨平台性
Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。
五、开发成本比较
PHP最经典的组合就是:PHP+MySQL+Apache。非常适合开发中小型的web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
Java的web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:WebSphere和Weblogic。
六、分布式多层架构比较
PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。
下面简要的说一下Struts,它实质上是在JSPModel2的基础上实现的一个MVC(Model、View、Controler)框架。JSPModel2体系结构是一种联合使用JSP与Servlet来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。
七、源代码安全
PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。
Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。
八、性能比较
有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。
在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。
数据库测试中,二者分别对Oracle8进行1000次Insert,Update,Select和Delete:JSP需要13秒,PHP需要69秒。
表格1PHP与Java的比较
PHPJAVA
可复用性低高
开发速度快慢
易维护性差优
可移植性优-Linux、Windows、Unix等
安全性低高
开发费用低高
多层架构差优
数据库访问接口不统一接口统一
可扩展性差优
面向对象差优
综上PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高
大多数Web服务器主要是为一种操作系统进行优化的,有的只能运行在一种操作系统上,所以选择Web服务器时,还需要和操作系统联系起来考虑。而且一般的品牌Web服务器都有自己的一套Web服务器系统软件,这就要考虑这套软件所支持的标准、应用(包括数据库应用)和安全协议等。一般要考虑以下几个方面1、从本身需求考虑,包括现在实际需求和应用与未来应用扩展需求。有些企业盲目要求高配置,其实这是不正确的。2、性能由于Web服务器为它的客户提供的数据类型通常是机密的。所支持的并发用户数,这是大家最容易想到的。Web服务器的并发用户数支持能力是指Web服务器在同一时刻可以允许的用户连接数。响应能力-其实这个参数与上面介绍的所能支持的并发用户数相关,响应速度越快,单位时间内就可以支持越多的访问量,用户点击的响应速度就越快。3、测试的机器应与打算购买的机器一致 有的IDC奸商,将测试的机器是至强机器,带宽放在100M的线上,用户测试时感觉的确快,但一转手到用户时,可能是普通的机器+普通的带宽,速度明显跟不上。要想体验真实的测试速度,必须确认测试的机器与打算购买的机器一致,也就是说,如果测试可以了,那就直接要这一台机,不用换线,不用换机器,不用下架。 4、签定托管/租用合同 很多人对于合同之事,不太重视,但一般机房或者一级代理,都提供此服务。有合同在手,一是日后可以有证明资料,一是使托管/租用正规化。5、安全性安全系统方面是否能7X24小时进行全方位机房监控。它主要要考虑两个方面:一是保护Web服务器机密信息;二是要防止黑客的攻击。6、管理的难易程度Web服务器的管理包含两种含义:一是管理Web服务器是否简单易行;二是利用Web界面进行网络管理。管理 Web服务器的管理界面一般有命令行、Telnet、HTML和基于窗口的应用程序。从服务器商的服务体系和技术实力来说,看IDC商是不是正规公司,是否拥有这方面的资深认证可以帮助你免费备案。如果出了问题,不能得到厂商及时、可靠的技术支持,将很可能影响到公司电子商务的正常应用。有没有专业的技术团队,后期维护没有管了。
web服务器常用性能指标如下:
吞吐量
固定时间间隔内的处理完毕事务个数。通常是1秒内处理完毕的请求个数,单位:事务/秒(tps)。
响应时间一次事务的处理时间。通常指从一个请求发出,到服务器进行处理后返回,再到接收完毕应答数据的时间间隔,单位:毫秒。
CPU占用率1-CPU空闲率,表示CPU被使用情况,反映了系统资源利用情况。
比较PHP和JSP这两个Web开发技术 在目前的情况是其实是比较PHP和Java的Web开发 以下是我就几个主要方面进行的比较
一 语言比较
PHP是解释执行的服务器脚本语言 首先php有简单容易上手的特点 语法和c语言比较象 所以学过c语言的程序员可以很快的熟悉php的开发 而java需要先学好java的语法和熟悉一些核心的类库 懂得面向对象的程序设计方法 所以java不如php好学
Java首先要编译成字节码 class文件 然后在java虚拟机上解释执行 Java的Web开发首先最容易想到的就是JSP(现在已经到JSP ) 原来的java的Web开发都是用servlet来实现的 用servlet来开发需要程序员在java的源文件中嵌入大量的代码 所以后来就出现了JSP JSP可以方便的嵌入到文件当中 其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet 然后再编译执行 Jsp可以通过servlet和JavaBean的支持产生强大的功能 JavaBean 是一种可复用的 跨平台的软件组件 使用javabean可以方便的实现java代码和的分离 能够增强系统的功能和软件的复用性
Java的Web开发属于SUN公司定义的J EE其中的规范 而且在J EE中包括了java的Web开发的所有方面 如 JSP Servlet JDBC JNDI JAVABEAN EJB等等 J EE就特别适合于做大型的企业级的应用
二 数据库访问比较
Java通过JDBC来访问数据库 通过不同的数据库厂商提供的数据库驱动方便地访问数据库 访问数据库的接口比较统一
PHP对于不同的数据库采用不同的数据库访问接口 所以数据库访问代码的通用性不强 例如 用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改 而PHP则需要做大量的修改工作
三 系统设计架构比较
采用Java的Web开发技术 需要使用的是面向对象的系统设计方法 而PHP还是采用面向过程的开发方法 所以用Java进行开发前期需要做大量的系统分析和设计的工作
四 跨平台性
Java和PHP都有很好的跨平台的特性 几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上
五 开发成本比较
PHP最经典的组合就是 PHP + MySQL + Apache 非常适合开发中小型的Web应用 开发的速度比较快 而且所有的软件都是开源免费的 可以减少投入
Java的Web应用服务器有免费Tomcat JBoss等 如果需要更好的商业化的服务有 Web Sphere和 Web logic
六 分布式多层架构比较
PHP只能实现简单的分布式两层或三层的架构 而JAVA在这方面就比较强大 可以实现多层的网络架构 数据库层(持久化层) 应用(业务)逻辑层 表示逻辑层彼此分开 而且现在不同的层都已经有一些成熟的开发框架的支持 例如Struts就是利用java的Web开发技术实现了MVC的设计模式 而在业务逻辑层也有Spring框架 数据库持久化层有Hibernate等框架 这些框架可以方便开发者高效 合理 科学得架构多层的商业应用
下面简要的说一下Struts 它实质上是在JSP Model 的基础上实现的一个MVC(Model View Controler)框架 JSP Model 体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法 在Struts框架中 模型由实现业务逻辑的JavaBean或EJB组件构成 控制器由Servlet实现的 视图由一组JSP文件组成 采用Struts可以明确角色的定义和开发者与网页设计者的分工 而且项目越复杂 其优势越明显
七 源代码安全
PHP开发的程序的源代码都是公开的 他人拿到php开发的程序后都可以进行修改
Java开发的程序 最后用户拿到的是只是一些编译好的class类 无法看到完整的源代码 安全性高
八 性能比较
有人做过试验 对这两种种语言分别做回圈性能测试及存取Oracle数据库测试
在循环性能测试中 JSP只用了令人吃惊的四秒钟就结束了 * 的回圈 而PHP测试的是 * 循环(少一个数量级) 却分别用了 秒
数据库测试中 二者分别对 Oracle 进行 次 Insert Update Select和Delete JSP 需要 秒 PHP 需要 秒
项目
PHP
JAVA
可复用性
低
高
开发速度
快
慢
易维护性
差
优
可移植性
优- Linux
Windows Unix
安全性
低
高
开发费用
低
高
多层架构
差
优
数据库访问
接口不统一
接口统一
可扩展性
差
优
面向对象
差
优
lishixinzhi/Article/program/PHP/201311/21447
通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。
下面让我们来细细道来:
Web服务器(Web Server)
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。
要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。
虽然Web服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。
应用程序服务器(The Application Server)
根据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程语言中的一个函数)一样。
应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。
在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。
一个例子
例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询(query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。
情景1:不带应用程序服务器的Web服务器
在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器。
简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。
情景2:带应用程序服务器的Web服务器
情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。 这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。
在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。
通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在HTML页中了。
总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。
警告(Caveats)
现在,XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。
另外,现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。
0条评论