ASP.NET编程:ASP.NET 2.0中的数据操纵:给编纂和新增界面增添考证控件仓酷云 ...
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。ScottMitchell2006年6月
Truly译
择要:本文次要先容怎样对GridView和DetailsView的新增、编纂功效举行完美,将本来主动天生的绑定列转换为模板列,进而增添考证控件,有助于更多懂得ASP.NET2.0中新的特征。
译注:ScottMitchell写的46篇(如今公布了前15篇)ASP.NET2.0教程系列第19篇译文,原文还没有公布,Word文档能够在这里下载中英混排版本这里下载中文版本
目次
简介
1、从《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》中复制代码
2、将绑定列转换为模板列
3、为GridView的项编纂模板(EditItemTemplate)增添考证控件
4、概述页上的数据录进成绩
5、为DetailsView的InsertItemTemplate模板增添考证控件
6、对考证控件举行分组
小结
简介
在后面三节的示例(Truly译注:本文脱稿时前三节16-18仍在严重翻译中,并且今朝本教程系列46篇只要15篇已公布,其他原文还没有公布,没法从收集猎取)中,GridView和DetailsView控件利用的是绑定列和CheckBoxField(绑定GridView和DetailsView时,经由过程智能标志能够令VS依据数据库主动增添对应的范例)。当编纂GridView大概DetailsView中的一行时,非只读属性的绑定列将主动转为textbox,以便用户修正现有的数据。一样地,当在DetailsView控件中新增纪录时,InsertVisible属性为true(默许值)的绑定列会出现出空的textbox,以承受用户输出。CheckBoxField列也是云云,一般作为只读的checkbox显现,新增/编纂纪录时则能够承受选择。
只管BoundField和CheckBoxField供应的编纂和增加界面相称有效,却缺少考证功效。当用户发生一些数据录进毛病DD好比漏掉了ProductName字段大概为UnitsInStock输出一个有效值(如-50)DD那末使用程序将从底层抛出一个非常。只管我们能够很好的处置这个非常像上节教程previoustutorial中会商的,可是,一个完善的‘新增/编纂’用户界面应当包含考证控件,在第一工夫制止用户输出这些有效数据。
为了供应一个自界说的新增/编纂界面,必要将BoundField和CheckBoxField换成模板列(ItemplateField)。关于模板列,已在《UsingTemplateFieldsintheGridViewControl和UsingTemplateFieldsintheDetailsViewControl》教程里会商过了,由几个处置分歧行形态的模板构成。模板列的项模板(ItemTemplate),用来出现DetailsView或GridView控件中的只读字段或行,而EditItemplate和InsertItemTemplate则分离是编纂和新增形式的界面模板。
在本节教程中,你会发明为模板列的EditItemTemplate和InsertItemTemplate供应考证控件来供应更强健的用户界面是何等的复杂。明白一点,本节教程接纳《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》中创立的示例代码,来增添新增/编纂时的相干考证。
1、复制《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》的示例代码
在《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》教程中我们创立了一个页面,并在一个可编纂的GridView中列表显现产物的名字和代价。页面另有一个DetailsView,DefaultMode属性设置成Insert,因而一直出现为新增形式。经由过程DetailsView,用户能够录进名字和代价增添新的产物,点击Insert后,新产物就被增添到体系里(见)。
<br>
:之前的代码同意用户增添新的产物或修正已有的产物
本节教程的方针是为DetailsView和GridView供应考证控件。更准确一些,此考证逻辑将是:
•新增/编纂产物时name为必填项
•新增纪录时price为必填项;编纂时仍然必要代价,而且在GridView的RowUpdating事务处置中使用上节教程previoustutorial中的程序逻辑
•确保输出的price是无效的泉币格局
在思索为后面代码增添考证之前,我们起首必要复制上节教程previoustutorial示例DataModificationEvents.aspx中的代码到本节教程的UIValidation.aspx页面上。要完成此点必要复制DataModificationEvents.aspx页面的元素标志和它的背景代码。先按上面步骤拷贝元素标志:
1.在VisualStudio中翻开DataModificationEvents.aspx
2.转到页面的源视图(单击页面底部的源(Source)按钮)
3.拷贝<asp:Content>至</asp:Content>标志间的文本(3到44行),见。
<br>
:拷贝<asp:Content>控件中的文本
4.翻开UIValidation.aspx页
5.转到页面的源视图
6.粘贴文本到<asp:Content>控件
然后翻开代码文件DataModificationEvents.aspx.cs,拷贝EditInsertDelete_DataModificationEvents类中的代码,及3个事务处置(Page_Load,GridView1_RowUpdating,和ObjectDataSource1_Inserting),注重不要把类声明和using语句也拷贝过去,然后将它们粘贴到UIValidation.aspx.cs中的EditInsertDelete_UIValidation里。
下面的事情完成后,不要急着下手,先砌杯茶在扫瞄器里检察一下是不是有误,这两个页面应当具有一样的输入和功效。(参照,DataModificationEvents.aspx运转时的抓图)。
2、将绑定列转换为模板列
要增添考证控件到新增/编纂界面,DetailsView和GridView必需将绑定列转换为模板列。要完成此转换,先点击GridView的智能标志(译者:GridView右上角的箭头),再选择‘编纂列…’(EditColumns),在右边顺次选择绑定字段并点击‘将此字段转换为TemplateField’链接(英文版是ConvertthisfieldintoaTemplateField,下同)。
<br>
:将DetailsView和GridView的绑定列转换为模板列
经由过程方才操纵的字段(英文版是Fields)对话框,绑定列能够转换为模板列,一样具有了只读,编纂,新增等原有功效。上面的代码显现了DetailsView直达换为模板列后的ProductName字段的元素标志:
<asp:TemplateFieldHeaderText="ProductName"SortExpression="ProductName"><EditItemTemplate><asp:TextBoxID="TextBox1"runat="server"Text="<%#Bind("ProductName")%>"></asp:TextBox></EditItemTemplate><InsertItemTemplate><asp:TextBoxID="TextBox1"runat="server"Text="<%#Bind("ProductName")%>"></asp:TextBox></InsertItemTemplate><ItemTemplate><asp:LabelID="Label1"runat="server"Text="<%#Bind("ProductName")%>"></asp:Label></ItemTemplate></asp:TemplateField>
注重该模板列主动创立了三个模板列,ItemTemplate,EditItemTemplate和InsertItemTemplate。项模板ItemTemplate利用LabelWeb控件复杂显现字段值(ProductName),而EditItemTemplate和InsertItemTemplate则利用TextBox控件并使用其Text属性来处置相干的数据。因为我们在页面上只利用DetailsView完成新增,你能够删除ItemTemplate和EditItemTemplate,固然留着也可有可无。
因为GridView不撑持DetailsView内建的新增功效,将GridView的ProductName字段转换为模板列,并只保存ItemTemplate和EditItemTemplate:
<asp:TemplateFieldHeaderText="ProductName"SortExpression="ProductName"><EditItemTemplate><asp:TextBoxID="TextBox1"runat="server"Text="<%#Bind("ProductName")%>"></asp:TextBox></EditItemTemplate><ItemTemplate><asp:LabelID="Label1"runat="server"Text="<%#Bind("ProductName")%>"></asp:Label></ItemTemplate></asp:TemplateField>
经由过程点击‘将此字段转换为TemplateField’链接,VisualStudio创立了一个模板列摹拟绑定列的界面,这一点能够经由过程在扫瞄器里检察页面来证明,交换前后表面和举动应当是完整分歧的。
注重:能够依据必要在模板里随便定制编纂界面。比方,大概我们对UnitPrice字段利用一个小一点的TextBox。要完成这一点能够经由过程设置TextBox的Columns属性大概经由过程Width属性指定一个流动宽度。下节教程会会商怎样用别的的数据输出Web控件交换TextBox来定制编纂界面。
3、为GridView的项编纂模板(EditItemTemplate)增添考证控件
创立数据录进表单时,限定用户录进必填的,正当的和格局化的数据非常主要。为确保用户录进数据都是无效的,ASP.NET供应了5种内建的考证控件来考证单一控件的值:
•RequiredFieldValidator–盘算输出控件的值以确保用户输出值
•CompareValidator–将输出控件的值同常数值或其他输出控件的值比拟较,以断定这两个值是不是与由对照运算符(小于、即是、年夜于、范例等等)指定的干系相婚配
•RangeValidator–盘算输出控件的值,以断定该值是不是在指定的下限与上限之间
•RegularExpressionValidator–盘算输出控件的值,以断定该值是不是与某个正则表达式所界说的形式相婚配
•CustomValidator–盘算输出控件的值以断定它是不是经由过程自界说的考证逻辑
关于这五种控件的更多信息,请参阅《ASP.NETQuickstartTutorials》中的ValidationControlssection。
本节教程中,关于DetailsView和GridView中的ProductName模板列我们必要利用RequiredFieldValidator,而DetailsView的UnitPrice模板列也必要一个RequiredFieldValidator。别的,还必要给一切的UnitPrice模板列增添一个CompareValidator,以确保输出的代价年夜于即是0而且是无效的泉币格局。
注重:ASP.NET1.x中已包括了这几个考证控件,可是ASP.NET2.0中增添了一些改善,次要的两点是客户端剧本对非IE扫瞄器的撑持和对页面上的部分考证控件举行分组完成某个按钮的特定考证控件组,参阅《DissectingtheValidationControlsinASP.NET2.0》(译者:也可参阅MSDNhttp://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnvs05/html/ValGroups.asp)。
如今我们来给GridView模板列中的EditItemTemplate增添这些要用到的考证控件。起首点击GridView的智能标志选择编纂模板翻开模板编纂界面,然后从下拉列表当选择你要编纂的模板。因为我们要处置的是编纂界面,这里我们要给ProductName和UnitPrice的EditItemTemplate模板增添考证控件。
<br>
:睁开ProductName和UnitPrice的EditItemTemplate模板
在ProductName的EditItemTemplate中,经由过程拖沓体例从工具箱里给编纂界面增添一个RequiredFieldValidator,放在TextBox前面。
<br>
:为ProductName的EditItemTemplate增添一个RequiredFieldValidator
一切的考证控件都只能为单个ASP.NETWeb控件服务,因而,必要让新增的这个考证控件为EditItemTemplate的TextBox控件举行考证;这必要将要考证控件的ID设置给考证控件的ControlToValidateproperty属性。TextBox以后的ID多是一个莫明的TextBox1,我们最好仍是付与它一个更符合的ID,单击模板中的TextBox,按F4检察属性窗口,将ID由TextBox1改成EditProductName。
<br>
:将TextBox的ID更名为EditProductName
接上去,设置RequiredFieldValidator的ControlToValidate属性为EditProductName。最初,设置ErrorMessage属性为“Youmustprovidetheproduct’sname”并将Text属性设置为“*”。假如设置了Text属性,那末当考证失利的时分文本值就会被显现出来。ErrorMessage属性也是必需的,它是为ValidationSummary筹办的;当Text属性值被省略时,ErrorMessage属性也会在有效输出时作为文本显现出来。
设置完RequiredFieldValidator的这些属性后,屏幕应当如所示:
<br>
:设置RequiredFieldValidator控件的ControlToValidate,ErrorMessage和Text属性
为ProductName的EditItemTemplate增添完RequiredFieldValidator,余下的就是为UnitPrice的EditItemplate模板增添一些需要的考证控件。因为我们决意UnitPrice编纂时作为选填,以是其实不必要RequiredFieldValidator。不外必要增添一个CompareValidator来确保UnitPrice无效,必需年夜于即是0而且时泉币格局。
在为UnitPrice的EditItemTemplate模板增添CompareValidator之前,先将TextBox的ID改成EditUnitPrice。然后增加CompareValidator控件并设置ControlToValidate属性为EditUnitPrice,ErrorMessage属性为“Thepricemustbegreaterthanorequaltozeroandcannotincludethecurrencysymbol”,Text属性为“*”。
为了确保UnitPrice值必需年夜于即是0,设置CompareValidator的Operator属性为GreaterThanEqual,ValueToCompare属性为“0”,而且Type属性为Currency。上面的代码显现了UnitPrice模板列中的EditItemTemplate调剂后的模样:
<EditItemTemplate><asp:TextBoxID="EditUnitPrice"runat="server"Text="<%#Bind("UnitPrice","{0:c}")%>"Columns="6"></asp:TextBox><asp:CompareValidatorID="CompareValidator1"runat="server"ControlToValidate="EditUnitPrice"ErrorMessage="Thepricemustbegreaterthanorequaltozeroandcannotincludethecurrencysymbol"Operator="GreaterThanEqual"Type="Currency"ValueToCompare="0">*</asp:CompareValidator></EditItemTemplate>
这些调剂以后,在扫瞄器里检察这个页面。假如对product编纂时你实验省略name大概输出一个有效的price,星号就会显现在文本框前面。如显现,包括了泉币切合的price,如$19.95,将被视作有效。CompareValidator控件的Currency范例同意数字支解符(像逗号,小数点,取决于culture设置),以正负号开首,可是不同意泉币标记。而编纂界面UnitPrice却出现为泉币情势,这类举动大概令用户很狐疑。
注重:回忆一下《EventsAssociatedwithInserting,Updating,andDeleting》教程,我们设置了绑定列的DataFormatString属性为{0:c},使其格局化为泉币。因为我们将ApplyFormatInEditMode属性置为true,招致GridView编纂界面将UnitPrice格局化为泉币格局。当绑定列转换为模板列会保存这些设置而且对TextBox的Text属性利用绑定语法<%#Bind("UnitPrice","{0:c}")%>举行格局化。
<br>
:有效输出时文本框前面显现的星号
基于云云的考证体例,在编纂纪录时用户必需手动删除泉币标记,很难让人承受。上面有三种选择举行弥补:
1.设置EditItemTemplate使UnitPrice不会被格局化为泉币。
2.移除CompareValidator并交换为RegularExpressionValidator,同意用户输出泉币标记,可是要编写代码来顺应分歧的文明设置。
3.移除考证控件并在GridView的RowUpdating事务处置中举行服务器端考证逻辑。
我们这里接纳第一种体例。UnitPrice经由过程EditItemTemplate中的绑定表达式<%#Bind("UnitPrice","{0:c}")%>转换为泉币格局。将其改成Bind("UnitPrice","{0:n2}")格局化为两位小数的数字。这些操纵能够间接在元素标志里完成,也能够经由过程点击EditUnitPrice文本框的‘编纂DataBindings…’链接(见、0)
<br>
:点击TextBox的‘编纂DataBindings’链接
<br>
0:为绑定表达式指定特定格局
这些改动以后,编纂界面的price被格局化为寄义逗号和小数点的格局,却没有了泉币标记。
注重:UnitPrice的EditItemTemplate不包括RequiredFieldValidator,运转回传并持续更新逻辑。但是,《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》教程中拷过去的RowUpdating事务处置包括了对供应的UnitPrice的反省代码。删除逻辑,坚持原样,大概给UnitPrice的EditItemTemplate增添RequiredFieldValidator悉随尊便。
四:概述页上的数据录进成绩
除这5个考证控件以外,ASP.NET包括了一个总结控件ValidationSummarycontrol,能够显现那些检测到有效数据的考证控件的ErrorMessage。以文本体例在页上某个地位概述毛病了局,大概经由过程一个客户端动静框。上面我们为程序增添一个客户端动静框概述页上全体的考证成绩。
从工具箱拖一个ValidationSummary控件到计划窗口上,它的地位没甚么请求,由于我们盘算把它以动静框的情势显现。在增添控件完以后,设置其ShowSummary属性为false并设置ShowMessageBox属性为true。如许以来,一切的考证毛病城市显现在一个客户端动静框中。
<br>
1:客户端动静框中的考证毛病总结(点击缩小)
5、为DetailsView的InsertItemTemplate增添考证控件
本教程中余下的部分就是为DetailsView的新增界面增添考证控件。这一事情与第三大节一样,这里不再赘言。像GridView的EditItemTemplates操纵中提到的,保举重定名TextBox的ID,这里分离利用InsertProductName和InsertUnitPrice而不是TextBox1和TextBox2。
为ProductName的InsertItemTemplate增添RequiredFieldValidator考证控件,并设置其ControlToValidate为模板中TextBox的ID,设置Text属性为“*”,ErrorMessage属性为“Youmustprovidetheproduct"sname”。
因为页面上的UnitPrice关于新增纪录是必填项,以是我们在UnitPrice的InsertItemTemplate中为其增添RequiredFieldValidator,设置ControlToValidate,Text和ErrorMessage等相干属性。最初,在UnitPrice的InsertItemTemplate增添得当的CompareValidator,参照后面UnitPrice增添CompareValidator的情况设置其ControlToValidate,Text,ErrorMessage,Type,Operator和ValueToCompare等相干属性。
经由过程增添的这些考证控件,新的product假如不供应name大概price为正数大概不法格局城市被体系回绝增加。
<br>
2:DetailsView新增界面中增加的考证逻辑(点击缩小)
6、对考证控件举行分组
页面上有两套逻辑上自力的考证控件汇合:GridView的编纂界面和DetailsView新增界面上响应的两组。默许情形下,当postback产生时页面上一切的考证城市失效。明显,当编纂纪录时我们不但愿DetailsView新增功效的考证起感化,3申明了这类为难场合排场-当用户在编纂product时输出了有些无效数据,在点击更新时却因为新增功效中的name和price空缺而发生考证毛病。
<br>
3:更新Product激发新增功效的考证控件(点击缩小)
ASP.NET2.0中的考证控件能够举行分组,这一功效是经由过程ValidationGroup属性。为了将这些考证控件联系关系到一个组,只需把ValidationGroup属性指定成统一个值。本教程中,将GridView模板中的ValidationGroup属性一致设置为EditValidationControls,而DetailsView模板中的ValidationGroup属性则为InsertValidationControls。上述操纵能够间接在代码编纂窗口完成大概经由过程计划器模板编纂界面的属性窗口修正。
ASP.NET2.0中除考证控件,按钮和按钮相干控件也增添了ValidationGroup属性。考证组中的考证控件只在有不异ValidationGroup属性的按钮发生postback时才会举行无效性检测,比方,为使DetailsView的新增按钮能够触发InsertValidationControls考证组,我们给CommandField的ValidationGroup属性指定为InsertValidationControls(4),而GridView中CommandField的ValidationGroup属性则指定为EditValidationControls。
<br>
4:设置DetailsView中CommandField的ValidationGroup属性为InsertValidationControls
上述操纵后,DetailsView和GridView的模板TemplateFields和CommandFields大抵以下:
DetailsView中的TemplateField模板和CommandField模板:
<asp:TemplateFieldHeaderText="ProductName"SortExpression="ProductName"><InsertItemTemplate><asp:TextBoxID="InsertProductName"runat="server"Text="<%#Bind("ProductName")%>"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator2"runat="server"ControlToValidate="InsertProductName"ErrorMessage="Youmustprovidetheproduct"sname"ValidationGroup="InsertValidationControls">*</asp:RequiredFieldValidator></InsertItemTemplate></asp:TemplateField><asp:TemplateFieldHeaderText="UnitPrice"SortExpression="UnitPrice"><InsertItemTemplate><asp:TextBoxID="InsertUnitPrice"runat="server"Text="<%#Bind("UnitPrice")%>"Columns="6"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator3"runat="server"ControlToValidate="InsertUnitPrice"ErrorMessage="Youmustprovidetheproduct"sprice"ValidationGroup="InsertValidationControls">*</asp:RequiredFieldValidator><asp:CompareValidatorID="CompareValidator2"runat="server"ControlToValidate="InsertUnitPrice"ErrorMessage="Thepricemustbegreaterthanorequaltozeroandcannotincludethecurrencysymbol"Operator="GreaterThanEqual"Type="Currency"ValueToCompare="0"ValidationGroup="InsertValidationControls">*</asp:CompareValidator></InsertItemTemplate></asp:TemplateField><asp:CommandFieldShowInsertButton="True"ValidationGroup="InsertValidationControls"/>
GridView中的CommandField模板和TemplateFields模板:<asp:CommandFieldShowEditButton="True"ValidationGroup="EditValidationControls"/><asp:TemplateFieldHeaderText="ProductName"SortExpression="ProductName"><EditItemTemplate><asp:TextBoxID="EditProductName"runat="server"Text="<%#Bind("ProductName")%>"></asp:TextBox><asp:RequiredFieldValidatorID="RequiredFieldValidator1"runat="server"ControlToValidate="EditProductName"ErrorMessage="Youmustprovidetheproduct"sname"ValidationGroup="EditValidationControls">*</asp:RequiredFieldValidator></EditItemTemplate><ItemTemplate><asp:LabelID="Label1"runat="server"Text="<%#Bind("ProductName")%>"></asp:Label></ItemTemplate></asp:TemplateField><asp:TemplateFieldHeaderText="UnitPrice"SortExpression="UnitPrice"><EditItemTemplate><asp:TextBoxID="EditUnitPrice"runat="server"Text="<%#Bind("UnitPrice","{0:n2}")%>"Columns="6"></asp:TextBox><asp:CompareValidatorID="CompareValidator1"runat="server"ControlToValidate="EditUnitPrice"ErrorMessage="Thepricemustbegreaterthanorequaltozeroandcannotincludethecurrencysymbol"Operator="GreaterThanEqual"Type="Currency"ValueToCompare="0"ValidationGroup="EditValidationControls">*</asp:CompareValidator></EditItemTemplate><ItemTemplate><asp:LabelID="Label2"runat="server"Text="<%#Bind("UnitPrice","{0:c}")%>"></asp:Label></ItemTemplate></asp:TemplateField>
当GridView的更新按钮点击时,编纂中特定的考证控件将会入手下手检测,而当DetailsView中的新增按钮被点击时,新增功效的相干考证失效,3的高亮部分显现了此举办理的成绩。可是这些修改以后,输出有效数据时ValidationSummary考证总结却不再显现了。这是因为ValidationSummary控件也具有ValidationGroup属性而且只显现来自于统一考证组中考证控件的信息。因而,我们必要利用两个考证控件,分离作为InsertValidationControls考证组和EditValidationControls考证组:
<asp:ValidationSummaryID="ValidationSummary1"runat="server"ShowMessageBox="True"ShowSummary="False"ValidationGroup="EditValidationControls"/><asp:ValidationSummaryID="ValidationSummary2"runat="server"ShowMessageBox="True"ShowSummary="False"ValidationGroup="InsertValidationControls"/>
写到这里,本节教程就能够画上句号了。
小结
固然绑定列BoundField能够供应了新增/编纂界面,却不克不及对其举行定制。良多情形,我们要给新增/编纂增添考证功效以确保用户输出正当无效的数据。为此,我们将BoundFields转换成了TemplateField,并在响应模板中增添了考证控件。本节教程扩大了《ExaminingtheEventsAssociatedwithInserting,Updating,andDeleting》中的代码,为DetailsView的新增和GridView的编纂界面增添了考证功效。别的,还演示了怎样利用ValidationSummary控件显现考证总结和怎样对考证控件举行分组。
正如本文所见,模板列同意为新增/编纂界面增添考证控件,固然也能够扩大其他的Web控件。在下节教程中,将会演示怎样用可数据绑定的DropDownList控件交换原本的TextBox,仅仅经由过程一个外键(如Products表中的CategoryID或SupplierID)。
祝编程康乐!
作者简介
ScottMitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的开创人,自1998年以来一向使用微软Web手艺。Scott是个自力的手艺征询参谋,培训师,作家,比来完成了将由Sams出书社出书的新作,《24小时内精晓ASP.NET2.0》(英文)。他的接洽电邮为mitchell@4guysfromrolla.com,也能够经由过程他的博客http://ScottOnWriting.NET与他接洽。
出格感激
本系列教程采取了良多可贵定见,本文的次要定见来自LizShulok和ZackJones。对我行将在MSDN公布的最新文章有乐趣的话,能够来信mitchell@4GuysFromRolla.com。
本文来自:博客园:http://www.ckuyun.com/Truly/archive/2006/06/27/437107.html#fastmanagedcode_topic2
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。 在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
页:
[1]