如何实现asp三层架构

作者&投稿:当涂戴 (若有异议请与网页底部的电邮联系)
如何运用好ASP中的三层架构~

表层框架_就是HTML代码和ASP控件
业务逻辑层_就是使用代码将你的内部逻辑表述清楚,就是你想这些控件干什么。。还有如何实现
数据层_调用数据库语句

三层架构的职责划分如下:
数据访问层(DAL)--负责与数据源的交互,即数据的插入、删除、修改以及从数据中读出数据等操作。对数据的正确性和
可用性不负责,数据的用途不了解,不负担任何业务逻辑。
业务逻辑层(BLL)--负责系统领域业务的处理,负责逻辑性数据的生成、处理及转换。对输入的逻辑性数据的正确性及
有效性负责,对输出的逻辑性数据及用户性数据不负责,对数据的呈现样式不负责。
表示层(Web,相对B/S系统)--负责接收用户的输入、将输出呈现给用户以及访问安全性验证。对输入的数据的正确性和
有效性负责,对呈现样式负责,对呈现友好的错误信息负责。

ASP具有良好的扩充性,我们访问数据库时,采用的时ADO对象,访问文件时,采用的是文件系统对象(FSO),其实这时程序已经是三层结构的应用程序了,只不过由于是利用内置的对象而为意识到罢了。这些对象都遵循COM/ActiveX接口,因此我们自己开发的对象也要遵循这个接口。下面,我们就以上文提到的"合格"标准为例,演示如何创建自己的三层结构的ASP应用。
1、在数据库系统中建立如下数据库表:
    Employee: EMPLID char (5) not null,
             Name  char (10) not null,
             Gender char (1) not null,
             Score   int not null
此表存储员工信息和考试成绩,为简单起见,这里只包含工号,姓名和性别三项,并且只有一门考试,EMPLID为主键。

2、建立动态链接库

启动VB(这里以VB为例,你可以用你喜欢的任何支持ActiveX接口的开发工具开发),新建一工程,工程类型为ActiveX
DLL。在工程中新建一个类,取名为Employee。你可以Class
Builder可视化的向类中填加属性和方法,也可以直接手工编辑。首先填加EMPLID属性如下:
  Private msEMPLID as string
  Property Let EMPLID(sEMPLID as string)
   msEMPLID=sEMPLID
  End Property
  Property Get EMPLID() as string
   EMPLID=msEMPLID
  End Property
一般地讲,每一个属性都应该有Property
Let和Property
Get两个方法,它们分别当向属性赋值和读取属性值时被调用。如果某个属性只被赋值而从不被读取(这种情况多发生在对应数据库表的主键的属性上),则Property
Get方法可以省略。Property
Let方法不能省略。你可以仿照上面的程序再建立Name,Gender和Score三个属性。然后创建如下方法:
  Public Sub Create(EMPLID as string)
  dim conn as new Connection
  dim rs as new Recordset
  dim sql as string
  'Suppose that you create a DSN in the control panel, the connectionstring property
  'can also be dsn-less string
  conn.ConnectionString="dsn=dsnname;uid=username;password=pwd"
  conn.open
  sql="select * from Employee where EMPLID='" & EMPLID & "'"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     msEMPLID=trim(.Fields("EMPLID"))
     msName=trim(.Fields("Name"))
     msGender=trim(.Fields("Gender"))
     msScore=.Fields("Score")
   end if
   .close
  end with
  set rs=nothing
  conn.close
  set conn=nothing
  End Sub
这里根据EMPLID创建Employee对象,注意数据库中的值是赋给三个私有变量,而不是直接赋值给属性,如果你单步调试就会发现,给msEMPLID赋值会调用Property Let EMPLID,也就是给属性赋值。
  下面我们再创建一个类Employees,并填加如下方法:
  private colQualifiedList as new Collection
  private mnCurrentIndex as integer
  Public Sub GetQualifiedList()
  dim conn as new Connection
  dim rs as new Recordset
  dim sql as string
  'Suppose that you create a DSN in the control panel, the connectionstring property
  'can also be dsn-less string
  conn.ConnectionString="dsn=dsnname;uid=username;password=pwd"
  conn.open
  sql="select EMPLID from Employee where Score>=60 order by Score desc"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     do while not .eof
       dim oEmployee as new Employee
       oEmployee.Create trim(.Fields("EMPLID"))
       colQualifiedList.Add oEmployee
       set oEmployee=nothing
     loop
   end if
   .close
  end with
  set rs=nothing
  conn.close
  set conn=nothing
  End Sub
首先请注意VB中创建类实例的语法dim
oEmployee as new
Employee,后面会看到,在ASP中创建类实例的语法是不同的。这个方法检索成绩大于等于60的员工工号,并据此创建一个Employee对象,再将此对象加入私有的集合对象中。下面两个函数遍历集合中的元素:
  Public Function GetFirst() as Employee
   if colQualifiedList.count>0 then
    mnCurrentIndex=1
     set GetFirst=colQualifiedList.Item(1)
   else
     set GetFirst=nothing
   end if
  End Function
  Public Function GetNext() as Employee
   mnCurrentIndex=mnCurrentIndex+1
   if mnCurrentIndex>colQualifiedList.count then
     set GetNext=nothing
   else
     set GetNext=colQualifiedList.Item(mnCurrentIndex)
   End if
  End Function
也许你会说,为何不把集合声明Public,这样在ASP中不是可以直接引用吗?确实,这样也行得通,编程实现起来也更简单些,但是,这样做破坏了封装性原则。因为数据以何格式存储完全是商业逻辑层的事,与用户界面层无关,假设有一天你因为每种原因放弃了用集合来存储数据的设计,而改用数组或记录集(Recordset)来存储,那你只需要修改GetFirst和GetNext两个函数,用户界面层完全无需修改。
至此类文件创建完毕,将工程文件存为 test.vbp,选File菜单下的Make test.dll选项将其编译。

3、注册动态链接库

启动Web
Server 上的Microsoft Transaction Server (Start--Windows NT
Optionpack4--Internet Information Server--Internet Service
Manager),展开Microsoft Transaction Server--Computer--My Computer--Package
Installed,点鼠标右键选New--Package--Create Empty
Package,输入包名Test(这里Test是任选的名字,不一定要与DLL同名),OK-Interactive User-the
current Logon
user--Finish。双击Test--Component,右键选Component-New-Component-Install New
component(s)-- Add
File,选择你刚编译好的DLL文件,MTS会发现DLL中有两个类Employee和Employees。至此DLL注册完毕。

4、编写ASP程序
  <HTML><Body>
  <p>Qualified Employee List</p>
  <table border=1 cellspacing=0 cellpadding=0>
  <tr>
   <td>Employee ID</td>
   <td>Name</td>
   <td>Gender</td>
   <td>Score</td>
  </tr>
  <%
   set oEmployees=server.createobject("Test.Employees")
   oEmployees.GetQualifiedList
   set oEmployee=oEmployees.GetFirst()
   do while not oEmployee is nothing
  %>
  <tr>
   <td><%=oEmployee.EMPLID%></td>
   <td><%=oEmployee.Name%></td>
   <td><%=oEmployee.Gender%></td>
   <td><%=oEmployee.Score%></td>
  </tr>
  <%
     set oEmployee=oEmployees.GetNext()
   loop
  %>
  </table>
  </body></html>
注意在ASP中创建类实例的语法set

oEmployees=server.createobject("Test.Employees"),其中Test是DLL的名字,Employees是类的名字;
当然,如果一个函数的返回值是一个对象,类似set oEmployee=oEmployees.GetFirst()这样的语法也是可以的。

至此,一个完整的三层结构的应用程序已经完成了,让我们看以下,如果把"合格"的定义改为:只有成绩进入前100名才算合格,程序需要做那些修改。事实上,如果你的数据库系统是SQL Server,你只需把SQL语句改为:

sql="select top 100 EMPLID from Employee order by Score desc" 就已经可以了,即使为了跨数据库系统的兼容性,我们也只需要对GetQualifiedList做如下修改:
  sql="select EMPLID from Employee order by Score desc"
  with rs
   .open sql,conn,1,3
   if .eof and .bof then
     exit sub
   else
     i=1
     do while (not .eof) and (i<=100)
       dim oEmployee as new Employee
       oEmployee.Create trim(.Fields("EMPLID"))
       colQualifiedList.Add oEmployee
       set oEmployee=nothing
       i=i+1
     loop
   end if
   .close
  end with
  ...
然后把DLL重新编译,注册就可以了,ASP程序完全不必修改。

12312312312312312312312312312312312


新建一个登录网页login.asp,一个管理员网页admin.asp,一个普通用户网页...
function checkform(formobj){ \/\/alert(formobj.username.value);if(formobj.username.value=="admin" && formobj.userpass.value=="admin"){ formobj.action = "111test.asp";}else{ formobj.action = "222test.asp";} } 使用js验证判断,但是就像ls说的其实没有必要,有什么操作...

ASP怎么实现数据集导航
))&" requestordey by id asc 最好是在打开这个记录的时候,判断是否有下一条记录 不知道是不是要这种效果http:\/\/www.d6gj.cn\/photo\/display.asp?id=1187 No3:如果是HTML文件的,可以把这个文件的路径存到数据库中,点标题的时候链接指向这个路径就可以了 其实网上有很多代码,你可以下载下来看看 ...

asp如何实现两台服务器上的access数据库互访
asp如何实现一台服务器上的程序互访另一台服务器上的access数据库?... asp如何实现一台服务器上的程序互访另一台服务器上的access数据库? 展开  我来答 2个回答 #热议# 生活中有哪些成瘾食物?匿名用户 2007-07-11 展开全部 一步一步教你网站同步镜像 1.介绍 现在的网站随着访问量的增加,单一服务器...

asp能实现定时自动更新数据吗,请高手发个代码!
我可以帮你解决这个问题,麻烦你用百度HI我一下!~当天50条信息其实当天就会写入数据库,但你显示的时候做一下改动即可达到你要的效果!有两条路都可以解决此问题 < if hour(now)>=8 then aaa=now()set rs1=server.createobject("ADODB.Recordset")sql1="select * from 招聘信息 where isupdatetime...

asp和.php网站的具体区别,各有何优点
至于网站本身需求实现上应该没有什么太大区别。简单说php优势更明显主要表现在以下几点:1.php比asp更快 2.php比asp更具优秀的内存管理 3.php比asp廉价,拥有很多优秀的免费开源资源 4.php比asp更具同性的编程风格 5.php比asp更具开放的社区支持,修改bug等 6.php比asp更具移植性 ...

vf是什么?
在三层构架中Visual FoxPro最胜任中间层的开发,它简单(开发难度与普通的Visual FoxPro项目相差不大)、快速的字符串生成、支持COM技术、它支持(MTS)COM+技术、它支持XML(Visual FoxPro 7.0提供3个与XML有关的函数)、它具有强大本地数据引擎、灵活的数据处理方式、它支持多线程的服务组件的开发。可能有人要问:用ASP+...

二层交换机、三层交换机、多层交换机、路由器的原理与应用有何不同...
交换机一般用于LAN-WAN的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。 路由器用于WAN-WAN之间的连接,可以解决异性网络之间转发分组,作用于网络层。他们只是从一条线路上接受输入分组,然后向另一条线路转发。这两条线路可能分属于不同的网络,并采用不同协议。相比较而言,路由器的...

OPC,AST ASP在电厂中分别代表什么意思有何作用?
抄过来的. OPC就是:Overspeed protection controller,是一个电磁阀,一般是失电关闭,带电打开。作为103%超速用。AST就是机组危急遮断电磁阀,失电打开卸掉安全油,实现机组停机ASP:一个AST油压保护测点,位于串、并混联的1,3、 2,4之间的一个油压点. ---原文---OPC就是:Overspeed protecti...

asp.net要怎样才能在中实现打开新窗口链接?
这需要把标签的属性设置成_blank 标签的 target 属性规定在何处打开链接文档。如果在一个 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口中的文档。如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个...

网络高手进。三层交换机第三层实现的原理?与路由器有何不同?
您这个问题实际上比较难以回答,因为涉及到的概念太多了.二层交换机主要是提供基于mac地址的数据帧转发的,一般用于直接连接终端设备(pc等)三层交换机和路由器主要是负责讲不同的广播域中的设备连接到一起,并且负责基于ip地址的数据包转发的.多层交换机可以实现根据4层传输层的tcp\/udp来转发数据包,还有更...

北道区19846951041: 怎么样通过代码实现ASP,NET3层结构?
长沙非羧苄: 3层结构分为 数据访问层,业务逻辑层,表示层 数据访问层只进行与数据相关的操作.如数据库的 insert ,update,delete,select ,磁盘文件的处理,Xml文件的处理.业务逻辑层只进行业务相关的处理,并调用数据访问层进行数据的处理表示层只用来输入数据,和反馈信息为用户提供一个交互式的操作界面.数据访问层只对业务逻辑层可见.业务逻辑层只对表示层可见.而表示层只对用户可见

北道区19846951041: asp.net 2.0 三层结构怎么实现? -
长沙非羧苄: 客户端+服务器+数据库 即三层结构 客户端即浏览器 服务端即Web服务器 数据库即数据库服务器 层次结构的优点在于结构比较灵活,维护简单. 以三层结构为例,改变表示层,不会对中间层、数据层产生影响,在适度范围内,改变数据层和数...

北道区19846951041: asp.net的三层结构具体是如何实现的?
长沙非羧苄: 不懂不要乱说,asp.net 三层架构 又称“MVC”是指 数据层(DATA),逻辑层,界面层(UI) 逻辑层通过,数据层和数据库联系传送数据,界面层通过逻辑层返回的数据显示到界面.

北道区19846951041: 求asp.net中用c#作简单三层架构的步骤,我看了很多例子,但不知道步骤 -
长沙非羧苄: 我靠诉你,asp.net三层架构,你真的想搞懂的话,你先得学c# ,学面向对象的思想,简单的三层,分为UI层,业务层(BLL),数据交换层(DAL),实体层(mode) UI<---Mode-------->BLL<-------mode------->DAL 现在我给你详述:UI层要实现...

北道区19846951041: asp.net的三层结构是怎样搭建的,有例子吗? -
长沙非羧苄: net的三层模式分为:(虽然是4层,但是称为三层模式).model实体层:主要是封装数据库里的字段 dal数据库层:对原始数据的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服...

北道区19846951041: ASP.NET
长沙非羧苄: 在Asp.net 中 多层还算比较简单一点的. 首先要有 业务实体层,即:Entity. 还有数据访问层. DataAccess. 完了就是业务逻辑层了 BLL. 每个层里面 添加方法,获得你想要的数据.( 代码实现.) 在该层添加对上一层的引用. 以此类推. 多层实现了. 层次分明, 便于调试.

北道区19846951041: 谁知道asp.net三层架构是怎么弄的?
长沙非羧苄: 三层架构:表示层,业务逻辑层,数据访问层.说简单点,数据层是对数据库进行增删改查操作,业务逻辑层是通过数据访问层来实现功能,表示层就是页面.

北道区19846951041: asp.net如何实现三层架构, -
长沙非羧苄: 三层 首先你得有一个基本的面向对象的概念 DAL层你需要在VS建一个类库任意名字 里面存入你对应数据处理的类(增删改查) BLL层这里业务逻辑层你刚刚初学不用理会建立一个BLL类库里面就放入调用DAL层的方法 UI层就是你的ASPX和ASPX.cs 以及一般处理程序等(你点击解决方案新建的项目就是你的UI层) 另外你可能需要到实体类MODEL用来映射数据库 类库需要在解决方案添加 还有你需要一个详细的代码参考 51aspx这个网站有简单容易的例子 我不是打广告的 纯手写

北道区19846951041: asp.net三层设计的具体步骤? -
长沙非羧苄: 不是文件夹的区别,而是三个不同的项目,表示层建一个网站,添加对BLL层的引用,页面就调用BLL层的类方法,BLL层为类库项目,添加对DAL层的引用,再调用他里面的方法.DAL层也是类库项目,里面就是对数据库的连接,和CRUD操作了.当然如果可以的话,还可以添加一个Models层,也就是将数据库里每个表,转换成类的形式.当你生成网站的时候,因为添加了对BLL,DAL,Models层的引用,会自动生成.dll文件,这样就可以直接把整个网站拷到IIS下面发布了.

北道区19846951041: asp.net三层结构搭建 -
长沙非羧苄: 1. 创建一个空白的解决方案 2. 在空白的解决方案里new 3个project,两个Class Library ,一个web site 创建的时候注意存放的路径,每个project都要放在解决方案下. 有问题可以问我!!!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网