仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 712|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET编程:当ASP.NET撞上JSF之构建使用程序的异同...

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你可以先看看这篇文章(软微学院生涯-三朝元老经验谈),打不开再跟我说。(我的意思是想让她自己先稍微了解一下到底现在各个方向学的工具以及以后要做的工具大概是什么,因为喜欢做什么样的事其实自己最清楚的)asp.net|js|程序  幻想情形下,ASP.NET和JSFweb页面应当包括很少的代码并且只是包括需要的HTML和标签来天生页面的组件,一个页面的事务逻辑驻留于代码文件中。在ASP.NET中,每一个web页面与一个响应的子类化页面ASP.NET类的.NET类文件相干联。偶然,这些文件被援用为"code-behind"文件。在JSF中,每一个web页面都有一个相干联的撑持JavaBean类。ASP.NET的code-behind文件和JSF撑持bean都包括页面属性(比方标签和输出域)。JSFbean是用Java编写的,而ASP.NETcode-behind文件可使用任何.NET言语(比方VB.NET或C#)编写。ASP.NETcode-behind类卖力处置相干联的页面事务。这个处置一个组件事务的Java类不用是页面的撑持JavaBean。过一会我们再会商它。值得注重的是,在ASP.NET平分离的code-behind文件多是不用要的-有大概在页面自己的代码中完成事务处置。但是,一样平常来讲,这被以为是一种欠好的编码理论,由于如许以来将会招致搅浑HTML和代码成绩。

  上面是我们的示例ASP.NET和JSF使用程序的两幅快照。因为两种组件的内涵特征和我也没有对之使用婚配的视觉式样,以是它们看起来稍微有些分歧。在两个页面中,显现一个集会房间表格,另有进一步懂得响应房间的View按钮和预订该房间的Reserve按钮。


ASP.NET程序快照

JSF程序快照  下面这些组件都是经由过程拖动增加的,然后经由过程修正一个属性面板定制它们的表面和举动。固然,我还能够经由过程编纂它们在HTML源码中的标签来定制这些组件。在此不赘述。上面,我们重点剖析一下在这些web页面面前的代码文件,从而进一步剖析事务代码。

  我以为,以表格情势显现数据是不错的入手下手,由于这类情形在使用程序是罕见的。为此,ASP.NET和JSF也都没有疏忽这类完成,两类被显现的组件都供应了内置功效来完成诸如排序和分页显现等效果。在ASP.NET2.0之前,ASP.NET就已供应了很多数据显现组件,个中DataGrid组件是利用最普遍的。别的,ASP.NET2.0刊行中引进了一个新的GridView组件。在本例中,我利用了这类组件,由于它增加了一些新的有效的特征。ASP.NET组件使用ADO.NET手艺,这也是全部.NET框架的数据存取手艺-ADO.NET供应了一种强健的工具模子来操纵各类范例的数据源。比方,Dataset工具同意你以一种断开的体例来利用数据。这意味着,为了利用数据,你的使用程序其实不必要一连地毗连到数据库上。一个Dataset还同意你潜伏在它的接口前面的数据库细节,从而使你以对使用程序的别的部分极小的影响来切换数据库。我在本例中所利用的JSF组件是一个与JavaStudioCreator一同刊行的表格组件。它利用一个DataProvider工具-它同意你使用JDBCRowset手艺。JDBCRowset还能使你在断开的情形下以一种易于利用的体例利用数据库。
<P>  每一个这些启动页面都各自包括一个单一的标签组件完成页面头部。在一个页面的事务处置器中能够存取和修正该页面组件。经由过程在可视化编纂器中复杂地双击该组件,你能够把年夜多半的事务挂接到一个组件上。并且,这将会把你导向代码文件中,在此你能够增加代码。如我们后面已注重到的,与web页面相干联的ASP.NET页面类恰是你的事务代码将驻留的中央。在JSF中,其实不象如许复杂。JSF事务遵守Observer计划形式。必要被关照某些事务的工具都要把它们本人注册为该事务响应的听者(listener)。在JSF中共有两品种型的事务:ValueChanged事务和Action事务。典范地,ValueChanged事务产生在比方列表框选择如许的举动中,而Action事务将发生比方按钮点击如许的用户举动。任何Java类都可以呼应于一个web表单的事务。但是,JSF页面的撑持bean是完成事务办法的很便利的地位,比方SunJavaStudioCreator就假定你把响应的完成安排于此。

  当启动一个ASP.NET使用程序时,位于一个文件web.config中的设置信息被剖析和使用。每一个ASP.NET使用程序都有一个web.config。我经由过程把毗连串存储到Mysql数据库中来使用这个文件。web.config常常用来存储数据库毗连串以到达在代码外坚持这个毗连。上面展现了web.config文件的一部分代码片段:

<connectionStrings>
<addname="MyConnectionString"
connectionString="Driver={MySQLODBC3.51Driver};server=localhost;database=test;uid=testuser;pwd=testpassword"
providerName="System.Data.Odbc"/>
</connectionStrings>
  JSF使用程序依附于典范的基于Servlet的Java使用程序架构。一个WEB-INF文件夹下带有一些子文件夹和一个包括使用程序设置(很类于ASP.NET的web.config)信息的文件web.xml。注重,这里的Mysql毗连串其实不保留在这个JSF使用程序的web.xml文件中。而是,StudioCreator主动地把该毗连增加到服务器的设置文件中,而我们的使用程序经由过程JNDI(Java定名和目次接口)来存取它-这是一种搜刮J2EE服务的经常使用体例。每个JSF使用程序的web.xml文件都指定一个FacesServlet范例的JavaServlet。这个FacesServlet卖力设置使用程序的响应于它的JSF利用的设置。在一个JSF使用程序中,一切的哀求都要"流经"FacesServlet。这个控件Servlet把持基于组件事务了局的使用程序页面之间的流程。这被称作"FrontController"计划形式。在ASP.NET中没有利用这类级其余直接体例,则是由页面自己把持页面流,称作"PageController"计划形式。经由过程参考存储在一个设置文件faces-config.xml中的页面到页面映照,这个FacesServlet晓得怎样路由哀求。这个设置文件也包括一些我们将要夸大的JSF设置信息。

  别的,ASP.NET和JSF页面具有十分类似的性命周期。在后面,我们已会商了组件是怎样基于用户举动天生事务的,而事务仅是这类性命周期的一部分。从一种初级视图角度来察看一个页面的性命周期,其大抵流程为:用户收回一个哀求并初始化页面,然后,页面的全部组件树被读进而且组件的形态被恢复,依据用户举动处置事务并更新组件值,最初了局页面被天生到用户端。固然,实践情况大概比这更加庞大些,并且另有一些主要阶段(比方数据校验)搀杂在这些步骤中。在JSF和ASP.NET之间的一个关头区分在于,组件怎样被天生到用户。ASP.NET组件在页面上天生本人;而在JSF中,组件可以自我天生,可是更加常常的是,它们把天生代办署理到特定的Renderer工具(可用于一个RenderKit中)。针对每种分歧范例的形貌媒体供应一种分歧的RenderKit。每个JSF完成城市供应一个缺省的HTMLRenderKit。这意味着,统一个JSF组件大概被以分歧情势天生到一种web扫瞄器或无线设备上-经由过程复杂地到场一个分歧的Render工具,这是一种相称强的天生才能。

  一个很便利的增加代码而又不依附于任何特定范例的用户哀求的机会是当页面临象被初始化时。ASP.NET供应了一个Page_Load事务-它当用户作任何范例的页面哀求时被挪用。在JSF页面中,你可使用类机关器办法来完成一样的页面初始化逻辑。上面是两种使用程序的响应于用户在数据显现组件上所做举措的事务处置代码。

//ConferenceRooms.Java事务代码:
publicStringbtnViewReservations_action(){
 //把选定行的响应的房间的id和name保留起来...
 Objectid=getValue("#{currentRow.value[conference_rooms.room_id]}");
 Objectname=getValue("#{currentRow.value[conference_rooms.room_name]}");
 ReservationsSessionBeanresBean=(ReservationsSessionBean)this.getBean("ReservationsSessionBean");
 resBean.setRoomId(id.toString());
 resBean.setRoomName(name.toString());
 return"view";
}
publicStringbtnMakeReservation_action(){
 Objectid=getValue("#{currentRow.value[conference_rooms.room_id]}");
 ReservationsSessionBeanresBean=(ReservationsSessionBean)this.getBean("ReservationsSessionBean");
 resBean.setRoomId(id.toString());
 return"reserve";
}
//ConferenceRooms.cs事务代码
protectedvoidGrdVwRooms_RowCommand(objectsender,GridViewCommandEventArgse)
{
 if(e.CommandName.Equals("Sort")){
  SortDirectionsd;
  if(((SortDirection)Session["sortRooms"]).Equals(SortDirection.Ascending)){
   sd=SortDirection.Descending;
 }
 else{
  sd=SortDirection.Ascending;
 }
 Session.Add("sortRooms",sd);
 this.GrdVwRooms.Sort(e.CommandArgument.ToString(),sd);
}
else
{
 DataKeydata=GrdVwRooms.DataKeys[Convert.ToInt32(e.CommandArgument)];
 Session.Add("roomId",data.Values["room_id"].ToString());
 Session.Add("roomName",data.Values["room_name"].ToString());
 if(e.CommandName.Equals("Reserve")){
  Server.Transfer("Reserve.aspx");
 }
 else
 {
  if(e.CommandName.Equals("View")){
   Server.Transfer("RoomReservations.aspx");
  }
 }
}
}
  这里的代码有一点分歧,Java类被分红了两个办法。这两个Java事务都是Action事务。我把这个ASP.NET使用程序中的一切的事务逻辑都归入到一个单一的RowCommand事务中而且查询该事务的参数来决意哪个用户事务产生。在这个特别的事务处置器中,我完成了view和reserve按钮点击响应事务,另有针关于ASP.NET组件情形的排序哀求。两种使用程序都保留roomId和roomName属性以便于使用程序的前面利用。详细请参考本文响应源码中的ConferenceRooms.java和ConferenceRooms.cs文件。记着,这些类文件中的年夜多半代码都是工具天生的,你可使用编纂器供应的代码堆叠功效来使代码更具可读性。在这些事务办法中,你能够当即存取这个页面组件的值以完成读取和修正。ASP.NET和JSF保留视图形态-经由过程把它写到埋没的HTML域中并把它从一个哀求传送到另外一个哀求。固然,利用不异的办法来存储形态的传统型ASP和JSP使用程序仍旧是可用的。比方,在ASP.NET和JSF页面中,房间id和name都被安排到用户的Session中,如许它就能够在前面被检索。
<P>  注重,在下面的事务代码中,ASP.NET文件挪用一个办法"Server.Transfer"完成把把持传送给另外一个页面。但是,在JSF事务代码中,你不会找到如许的到另外一个页面的间接的参考,而唯一前往串"view"和"reserve"。这是由于,JSF中经过我们更早会商的faces-config设置文件处置页面流成绩,任何利用过开源框架Struts的Java开辟者应当对此很熟习。在ConferenceRooms.jsp文件的faces-config.xml文件中共有两个出口-字符串"view"和"reserve"。在运转时候,使用程序利用这些字符串查询页面地点。上面是在ConferenceRooms.jsp页面的faces-config文件中发明的XML情势的导航划定规矩。我是利用JavaStudioCreator中的一个可视化计划器创立的这些映照。

<navigation-rule>
 <from-view-id>/ConferenceRooms.jsp</from-view-id>
 <navigation-case>
  <from-outcome>view</from-outcome>
  <to-view-id>/RoomReservations.jsp</to-view-id>
 </navigation-case>
 <navigation-case>
  <from-outcome>reserve</from-outcome>
  <to-view-id>/ReserveRoom.jsp</to-view-id>
 </navigation-case>
</navigation-rule>
  
  可视化计划器展现了在JavaStudioCreator中的导航划定规矩

  这个faces-config文件也是你枚举与你的JSP页面文件相干联的一切JavaBean的中央。现实上,你能够经由过程这个文件设置任何你的使用程序必要参考的Java工具-这些Java工具被参考为managedbeans。一切的JSF撑持bean都将在这个设置文件中被枚举为托管bean,可是任何你必要的别的工具也都能够在这里找到。一个托管bean包括完整限制的类名、该bean(是把它存储在使用程序的Request,Session仍是使用程序级)的利用局限和当参考这个bean时要利用的名字。鄙人面的XML中,枚举出了初启web页面的撑持bean,另有一个名为ReservationsSessionBean(我们利用它来共享使用程序中的数据)的EJB的出口:

<managed-bean>
 <managed-bean-name>ReservationsSessionBean</managed-bean-name>
 <managed-bean-class>webreservations.ReservationsSessionBean</managed-bean-class>
 <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
 <managed-bean-name>ConferenceRooms</managed-bean-name>
 <managed-bean-class>webreservations.ConferenceRooms</managed-bean-class>
 <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
  让我们再回到后面的使用程序中来,我们的检察预订信息的哀求把我们引向ASP.NET版本的RoomReservations.cs.aspx(响应于JSF版本的RoomReservations.jsp)。在相干的代码文件(RoomReservations.cs和RoomReservations.java)中,该事务代码检索存储于前一个页面中的房间id而且利用它来过滤第二个表格(它枚举有关该房间的预订情形)。在数据表格下面的标签被修正以援用响应房间的名字。


ASP.NET
>
JSF

  一个delete按钮响应于删除每行数据,这两个组件都同意你轻松地修正表中的数据。最初,每个表单都包括一个按钮-它把你导向另外一个表单以增加对该房间的新的预订。这些表单显现于上面图中。注重,在图中由JavaStudioCreator和VisualStudio完成的日历组件在显现上有所分歧,可是完成不异的目标。


ASP.NET

JSF无论谁倒了对双方阵营的粉丝们也是有害无益。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-18 20:16:05 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
若相依 该用户已被删除
板凳
发表于 2015-1-23 11:21:27 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
若天明 该用户已被删除
地板
发表于 2015-1-31 15:47:19 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
分手快乐 该用户已被删除
5#
发表于 2015-2-6 20:20:15 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
6#
发表于 2015-2-18 13:16:21 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-6 06:55:21 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
深爱那片海 该用户已被删除
8#
发表于 2015-3-12 22:08:36 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
海妖 该用户已被删除
9#
发表于 2015-3-20 03:53:07 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 18:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表