动态网站web开发 PHP、ASP还是ASP.NET

这是一个经常被提出的问题,并且它很容易把人们带入争论Linux还是Windows的歧途。这样的争论事实上反映出了对于相互竞争的Web开发技术要进行并行分析是多么困难的一件事情,而这一难度同时因为开发人员对任何可比较操作系统的不同意见而大大增加。

所以与其继续参与到这样的争论中,我们还不如来看看每一项技术对于特定Web开发以及运行环境所表现出的优势。尽管ASP和PHP的相似程度大于其中任意一种与ASP.NET的相似程度,我们还是要讨论ASP.NET。原因是开发人员常常将其与ASP相混淆,并且在微软的努力下ASP.NET的确会在将来完全取代ASP。

基本理论——特点概述
PHP——超文本预处理器(Hypertext Pre-processor)
PHP是开放源代码服务器端的脚本语言,在语法上同C语言非常类似。尽管最初是被设计用于基于Linux的Apache Web 服务器系统,现在的PHP已经被移植到了任何操作系统并兼容任何标准Web服务器软件。由此也可以得出PHP的三大主要优势。首先它是跨平台的技术,因此PHP应用程序可以被方便的移植——当然这还要取决于诸如厂商特定数据库等需要集成的额外组件。这样的可移植性还带来了另一方面的优势,即绝大部分的Web主机提供商都会支持PHP,因此根据需要更改主机将会非常方便。

第二点,由于PHP同C编程语言有很多相似之处,对于熟悉相关语法的开发人员来说,PHP则非常容易上手——这种语法同样在Java、JavaScript以及Perl中得到应用。第三,由于是开放源代码产品,PHP将继续快速发展,更为重要的是相关漏洞补丁将免费的定期植入到核心库中。

此外,在一些特定的编程需求下,PHP对于开发人员显示出了更为诱人的吸引力。首先,PHP有内建库支持对于图片及PDF文档的直接创建和相关操作。这意味着当一个应用程序调用包含有anti-aliased类型文本的动态创建菜单图像,或者是需要导出Acrobat格式页面时,PHP都将是解决此类问题的理想技术。尽管这些功能在理论上也可以通过其他与PHP相竞争的技术获得,但往往其他技术需要安装第三方自定义组件才能实现。

另一点使得PHP成为编写服务器脚本最佳选择的是在处理连接mySOL或者Postgres数据库一类的问题时PHP的良好表现。尽管对于mySOL或者Postgres数据库的访问可以通过ASP技术借助ODBC连接来实现,但这常常需要系统管理员进行额外的配置。幸运的是,这点限制在ASP.NET中得到了改正,当需要建立类似于使用MS SQL Server的直接数据库连接时可以通过mySQL提供数据。

ASP——动态服务页面(Active Server Pages)
微软将ASP引入Windows NT Server 4并将其作为IIS Web服务器下的动态Web应用程序的默认使用平台。由于它使用VBScript(Visual Basic语言的一个分支),ASP立即被熟悉Microsoft IDE——Visual Studio编程的开发人员所追捧。随着脚本语言的不断发展,研究人员对ASP并没有引入太多功能使之加入到技术竞争的行列。因此,在PHP中可以看到的诸如图像操作等功能没有集成到ASP中。但开发人员仍然可以通过DLL文件的形式编写(或者安装)第三方COM对象来完成类似的工作。在服务器自身允许的情况下,通过这种方式可以编写代码来完成任何动作。当然,造成的缺陷是这将导致为了配置这些服务开发人员不得不与桌面系统进行交互——对于Web开发人员来说这项功能并不是必须的。

ASP的优势是在企业环境中微软服务器几乎无处不在。此外,MS SQL Server同样具有广泛的市场,并且能很好的支持ASP(这并不会让人感到惊奇)。尽管事实上通过ODBC可以兼容任何数据来源,但SQL Server以及文件DSN访问(file DSN access)可以在代码一级得到实现。

ASP.NET
是选择ASP还是PHP的争论正在随着.NET的崛起而越来越显得多余。的确,过去长达数年的争论将随着是选择Java还是.NET技术(或是两者)答案的揭晓而终结。ASP以及ASP.NET的唯一联系是二者都使用VBScript。而单独就.NET而言,它可以使用VBScript以及其他大约20种语言。

对于ASP以及PHP来说,将ASP.NET看作是另外一种语言的原因是它运行在完全不同的构架之上。前者是翻译脚本语言,而.NET则是经过编译的framework。这就意味着首先Web页面的运行速度将会有极大提高。同时,源代码更加安全且更为健壮。此外,ASP.NET给Web编程带来了新的理念——即“code-behind页面”的思想。按照code-behind思想,每一个HTML页面都是由自身经过编译的程序化指令进行驱动。因此,HTML——或称之为表现层——很大程度上脱离了应用程序的商业逻辑。尽管这样的分离也可以通过PHP和ASP来实现,但这并非同ASP.NET一样属于自身技术的主要部分。

ASP.NET的另一好处是它完整的集成了对XML以及Web服务的各种支持。对.NET而言可以使用非常广泛的安全以及密码系统库,这对于金融机构和企业数据应用程序尤为有用。就缺陷而言,即使是具备丰富经验的开发人员也会发现使用.NET可能把自己搞糊涂。不考虑开发者对于所使用的编程语言的熟悉程度,对于Web开发人员来说,在程序范例方面难度的大幅提升可能会成为他们融入ASP.NET的主要障碍。对ASP.NET应用程序来说主机同样是个问题,ASP.NET并未同ASP或者PHP一样获得了主机提供商的广泛支持,无法在同一级别上展开竞争。

实践——语言比较
变量声明

在VBScript中(ASP和ASP.NET都使用VBScript),在使用变量之前并不一定要对其进行声明,尽管技术文档通常建议这么做。使用Option Explicit声明,开发人员可以通过程序强制进行变量声明。在PHP中,变量可以被声明,尽管没有办法强制开发人员做到这点。的确,在使用之前变量都自动进行声明。PHP变量的优点在于变量可以被设置成为其他变量的引用(references),而在VBScript中变量只能通过值来定义。

<%

' VBScript Example

Option Explicit

myVar = 1

myOtherVar = myVar

myVar = 2

' myResult will be 3

myResult = myVar + myOtherVar

%>

<?

// PHP Example

$myVar = 1;

'Use the ampersand to make a reference

$myOtherVar = &$myVar;

$myVar = 2;

// $myResult will be 4

$myResult = $myVar + $myOtherVar;

?>

变量收集
在PHP以及ASP中使用表单以及query string变量的方法非常相似。有很多办法可以访问表单以及query string变量的集合,例如通过name或者将其作为数组。在ASP.NET中情况则有很多不同,尤其是对于表单域。不同于盲目的寻找提交过的表单变量,code-behind可以对HTML页面中的每一个表单域了如指掌,并可以按照任何已知事件的执行为条件触发对这些表单域的值进行检查。其中一个事件是“postback”,当表单被用户提交时此事件被触发。其他的事件可以是客户端的程序,并且可以通过JavaScript来触发。在ASP.NET中,二者没有性质上的区别。

<%

' ASP Example

myFormVal = request.form("myInputField")

myQSval = request.querystring("myQSitem")

myVal = request.item("myFormOrQSitem")

%>

<?

// PHP 4.1+ Example

$myFormVal = $_POST['myInputField'];

$myQSval = $_REQUEST['myQSitem'];

// PHP 3+ Example

$myFormVal = $HTTP_POST_VARS['myInputField'];

// If register_globals = on

$myVal = $myFormOrQSitem;

?>

<!-- ASP.NET example -->

<html>

<script language="VB" runat=server>

Sub SubmitBtn_Click(Sender As Object, E As EventArgs)

Message.Text = "Hello " & Name.Text

End Sub

</script>

<body>

<form action="action.aspx" method="post" runat="server">

Name: <asp:textbox id="Name" runat="server"/>

<asp:button text="OK" OnClick="SubmitBtn_Click"

runat="server"/>

<asp:label id="Message" runat="server"/>

</form>

</body>

</html>

字符串连接(String Concatenation)
 PHP似乎对此问题给予了足够的重视,它允许将变量插入到字符串中而无需考虑通常的串连(Concatenation)问题。ASP.NET则把整个过程弄得比较麻烦,需要借助其StringBuilder类,但由此ASP.NET的运行速度也会快很多。

<?

// PHP Example

$link = mysql_connect("host", "user", "password")or die("mysql_error());

mysql_select_db("database") or die("Could not select database");

$query = "SELECT * FROM Table";

$result = mysql_query($query) or die(mysql_error());

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

foreach ($line as $col_value) {

//do something

}

}

?>

连接数据库
对于数据库的连接问题,每种技术都表现出了各自突出的规范性。首先,每种情况都要建立到数据库的连接。对于PHP,在建立之后选择数据库(对于ASP以及ASP.NET则将在连接阶段完成)。随后将建立一个询问,并将其传送给数据库,由此可能产生也可能不会产生一条返回记录。

由于在本质上ASP.NET更为以对象为导向,并且支持复杂的错误处理(error handling),因此无论是相对于PHP还是ASP,在完成简单任务方面ASP.NET可能会需要编写更多的代码。但在优势方面,ASP.NET完成显示数据功能所需要的代码则大大少于PHP以及ASP——尤其如果使用内建的datagrid控制来自动创建HTML输出。

<%

'ASP Example

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.Open "Driver={SQL Server};Server=MyServerName;" & _

"Database=myDatabaseName;Uid=;Pwd="

const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.OpenstrSQL, objConn

Do While Not objRS.EOF

'do something

objRS.MoveNext

Loop

%>

' ASP.NET Example

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>

<html>

<script language="VB" runat="server">

Sub Page_Load(Sender As Object, E As EventArgs)

Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ")

Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn)

MyConn.Open()

Dim dr As SqlDataReader = MyComm.ExecuteReader()

MyDataGrid.DataSource = dr

MyDataGrid.DataBind()

MyConn.Close()

End Sub

</script>

<body>

<ASP:DataGrid id="MyDataGrid" runat="server"

Width="600"

BackColor="#FFFFFF"

BorderColor="#000000"

ShowFooter="false"

CellPadding=2

CellSpacing="0"

Font-Name="Verdana"

Font-Size="8pt"

HeaderStyle-BackColor="#EEEEEE"

EnableViewState="false"

/>

</body>

</html>

结论

选择ASP、PHP还是ASP.NET将最终取决于应用程序的需要,以及运行程序的系统环境。开发人员对于相似编程语言或范例的熟悉程度同样可以作为选择的因素。记住没有完美的方法和个人实际情况可以表明哪种技术是最佳选择。比如,使用ASP.NET为一个Windows服务器创建一个单页面的表单邮件应用程序似乎有些大材小用,但对于ASP来说这是极佳的应用环境。如果一个站点需要同Linux Apache服务器上的mySQL数据库连接,那么使用ASP或者ASP.NET则会显得力不从心。如果能够提前详细考虑用户的个人要求,那么开发人员在这些相互竞争的技术中进行选择的过程则已成功了一半。

(0)

相关推荐

  • ASP开发网页牢记注意事项

    ASP开发网页牢记注意事项     选择自 RAINMAN_NET 的 Blog   关键字   ASP开发网页牢记注意事项  出处 永远不要相信用户输入的内容具有适当的大小或者包含适当的字符.在使用其做出决策之前应该始终对用户输入进行验证.最佳的选择是创建一个 COM+ 组件,这样您可以从 ASP 页面中调用该组件来验证用户的输入内容.您也可以使用 Server.HTMLEncode 方法.Server.URLEncode 方法,或者本页底部代码示例中的某一个.  不要通过连接用户输入的字符串

  • ASP开发中数据库文件调用的捷径

    引言  本文针对ASP程序设计中最基础.也是最关键的部分"数据库文件的调用"进行说明,同时谈谈ASP程序设计中数据库文件调用的一些技巧. ASP简介 ASP(Active Server Pages)是微软于1996年推出的Web应用程序开发技术,它是一种脚本语言.ActiveX组件及HTML语言等的综合,微软把它描述为"一个服务器的脚本环境,在这里可以生成和运行动态的.交互的.高性能的Web服务器应用程序".其主要功能是为生成动态的.交互式的Web服务器应用程序提供

  • ASP开发准则是什么

    虽然许多使用 ASP 的 Web 站点根本就不用组件,但在这篇文章中假定 ASP 是 Internet 客户机和组件之间的桥梁. ASP 和组件之间的划分服务 ASP 最常用于在服务器上创建供客户机使用的 HTML 或 XML 文件,因此我们主要讨论这种使用方案.这就引出了一个常见的问题,如果 ASP 页面在服务器上,那么它们是否属于业务层的一部分呢?在组件世界中,答案通常是否.虽然 ASP 确实在服务器上运行,而且可能与应用程序服务器在同一个空间,但是这不能使它成为业务逻辑的一部分. 随着用户

  • 支付宝 接口开发帮助(asp,php,asp.net,jsp)

    推荐两文:1.支付宝购买流程 2.支付宝卖家流程 支付宝接口提供最新的ASP.ASP.NET.PHP.JSP等目前网络上最流行的源码包文件,程序员可以下载后按本文介绍更改参数和布置即可!而本文拿ASP.NET(C#)详细介绍. ------------------------------------------------------------------------------------- 摘自:支付宝官方 点击下载 实物商品交易服务集成技术文档和服务介绍 按照文档中的提示进行集成操作.

  • ASP 常见对象总结(熟悉一下利用以后的开发使用)

    ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可以自己编写COM组件,下面是我们经常使用的: Server.CreateObject("scripting.filesystemobject") Server.CreateObject("scripting.dictionary")hashtable server.createxobject("word.Application&quo

  • 用ASP开发网页需要牢记的注意事项

    步 骤 1.永远不要相信用户输入的内容具有适当的大小或者包含适当的字符.在使用其做出决策之前应该始终对用户输入进行验证.最佳的选择是创建一个 COM+ 组件,这样您可以从 ASP 页面中调用该组件来验证用户的输入内容.您也可以使用 Server.HTMLEncode 方法.Server.URLEncode 方法,或者本页底部代码示例中的某一个. 2.不要通过连接用户输入的字符串来创建 ASP 页中的数据库连接字符串.恶意用户可以通过在他们的输入内容中插入代码来获取数据库的访问权限.如果您使用的是

  • ASP开发中存储过程应用全接触

    ASP开发中存储过程应用全接触        ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过.我在初学时查阅过大量相关资料 ,发现其中提供的很多方法实际操作起来并不是那么回事.对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为 它们根本就是千篇一律,互相抄袭,稍微复杂点的应用,就全都语焉不详了. 现在,我基本上通过调用存储过程访问SQL Server,以下的文字都是实践的总结,希望对大家能有帮助. 存储过程就是作为可执行对象存放在数据库中的

  • ASP开发中可能遇到的错误信息中文说明大全(整理收集)第1/2页

    如果你搞过ASP的开发,你就会为ASP中没有好的完整的调试环境而头疼不己.我收集了网上相关所有信息提示,想给它做成单机的ASP开发错误提示软件中的数据库,但是我发现应该还有些是我所不清楚或说是了解的.所以放在这里,请知道的朋友再次提出你的观点或说更详细的信息,我将非常感激!如果有好的建议,如果软件出来后,我将首先免费送给您尝试使用! 再次希望看到这个文章的朋友们,能够支持和鼓励我做这个东西!(反正我觉得做这样东西的好像就没有啊),请大家指出问题并且补充!!!呵!!!!!-------------

  • ASP存储过程开发应用详解第1/2页

    我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事.对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们根本就是千篇一律,互相抄袭,稍微复杂点的应用,就全都语焉不详了. 现在,我基本上通过调用存储过程访问SQL Server,以下的文字都是实践的总结,希望对大家能有帮助. 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令. 定义总是很抽象.存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Serv

  • 动态网站web开发 PHP、ASP还是ASP.NET

    这是一个经常被提出的问题,并且它很容易把人们带入争论Linux还是Windows的歧途.这样的争论事实上反映出了对于相互竞争的Web开发技术要进行并行分析是多么困难的一件事情,而这一难度同时因为开发人员对任何可比较操作系统的不同意见而大大增加. 所以与其继续参与到这样的争论中,我们还不如来看看每一项技术对于特定Web开发以及运行环境所表现出的优势.尽管ASP和PHP的相似程度大于其中任意一种与ASP.NET的相似程度,我们还是要讨论ASP.NET.原因是开发人员常常将其与ASP相混淆,并且在微软

  • 基于JSP的动态网站开发技术

    随着Web技术的发展和电子商务时代的到来,人们不再满足于建立各种静态地发布信息的网站,更多的时候需要能与用户进行交互,并能提供后台数据库的管理和控制等服务的动态网站. 动态网站开发技术 早期的动态网站开发技术使用的是CGI-BIN接口.开发人员编写与接口相关的单独的程序和基于Web的应用程序,后者通过Web服务器来调用前者.这种开发技术存在着严重的扩展性问题--每一个新的CGI程序要求在服务器上新增一个进程.如果多个用户并发地访问该程序,这些进程将耗尽该Web服务器所有的可用资源,直至其崩溃.

  • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍

    1.Session 2.验证码 YZM.ashx 复制代码 代码如下: <%@ WebHandler Language="C#" Class="YZM" %> using System;using System.Web; public class YZM : IHttpHandler, System.Web.SessionState.IRequiresSessionState{ public void ProcessRequest (HttpContex

  • Web开发/设计人员应当知道的15个网站

    ColorCombos 在进行网站设计的时候,开始步骤的其中一项(也是最重要)的内容是选择出一个配色方案. Color Combos让你可以浏览上千个不同的颜色组合,以便从中为你即将开始的设计汲取灵感.其配色方案可按颜色浏览. LIpsum 风靡之至的Lorem Ipsum文字,其大名谁人不知?哪个不晓?(译注:查了才知道,这是指一篇用于测试排版设计的拉丁文文章,从15世纪开始就被广泛使用,文章因以Lorem Ipsum开头而得名)该段文字被全球各地的网站设计者用来在设计中对其真正的文字的呈现效

  • Java Web开发入门书籍实例解析(总结一)

    从事Java Web开发这一段时间来,对Java 面向对象的思想和MVC开发模式可以说已经熟悉了.我当前参与的项目使用的框架是Spring.SpringMVC.Hibernate.下面我们小编给大家整理一篇教程帮助大家学习javaweb相关知识,感兴趣的朋友可以参考下. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 1.静态web资源(如html 页面):指w

  • 三种Web开发主流技术的性价评价

    ASP:MS IIS 4/Visuale Interdev 6   PHP:Apache 1.2.x/HomeSite 4.5/PHP 4   Java:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2   以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对自己应用系统进行选择的同仁谈谈自己对它们的评价,以做参考,同时也请大家提出自己的想法和意见 ,多交流.但是我有一个这样的看法:"一个产品它存在就有存在的理由,它不可能

  • 创业如何选择WEB开发语言

    在打算开发一个网站时,选择什么语言,是首先需要面对的问题.目前主流的WEB开发语言有ASP.NET.PHP.JSP; 作为MS上世纪老将ASP,就不再提及,如果是因为维护方面的原因而必须使用,可考虑升级到ASP.NET,而作为新开发一个语言,实在找不到理由再使用它了; 以下将对这三种语言做对比,以供权衡: 上手度 .NET: 5分 PHP:3分 JSP:1分 如果你是一个WEB方面的新手,这三门WEB语言的学习成本差别很大.ASP.net 作为微软的产品,继承了其一贯的特点,方便上手,易用;甚至

  • 做web开发 先学JavaScript

    有一天我被问到,为了快速地在 web 开发工作上增加优势,应该学习什么语言.我的思绪回到了大学,那时候我用 Pascal.Fortran.C和汇编语言,不过那个时候有不同的目标. 想做web开发,就学JavaScript 鉴于当前的状况和趋势,答案相对容易给出来:学习 JavaScript.四周看看,曾经低端的浏览器脚本语言现在变得随处可见,从服务器端到客户端,每天好像有更多的选择. 出身低微 我记得数年前投入 web 开发,学习了 HTML.用 Perl 开发 CGI 脚本.Netscape

  • 快速使用node.js进行web开发详解

    首先关于node.js的学习,这里推荐一本比较好的教程,nodejs web开发指南,该书通俗易懂地将node.js语言特性讲解完之后,又从一个项目角度带领读者使用node.js学习web开发.相信这是一个比较好的学习模式和过程.由于这本书是2012年出的,书中的一个web教学项目是开发一个微博.从2012到现在,node.js及其生态环境发生了很大改变,所以关于该书的学习如果照着书本显然是过于陈旧的.到目前为止,node.js的web开发框架已经升级到了Express4.12.1,对于Mong

随机推荐