1、 三层C/S结构
2、 三层B/S结构
三层C/S结构(3-Tier C/S Architecture)
§第1层:用户界面GUI—表示层——客户机
§第2层:业务逻辑—功能层——应用服务器
§第3层:数据库—数据层——数据库服务器
基本组件:
–数据库服务器
? 存放数据的数据库、负责数据处理的业务逻辑;
–应用服务器
? 业务逻辑:对数据进行处理;
–客户机应用程序
? GUI:用户界面
§连接件:经由网络的调用-返回机制或隐式调用机制
–客户机?à应用服务器:客户机向应用服务器发送请求,并接收返回结果。
–应用服务器?à数据服务器:应用服务器向数据服务器发送请求,并接收返回结果。
表示层:
§应用的用户接口部分,担负着用户与应用之间的对话功能;
§检查用户从键盘等输入的数据,显示应用输出的数据;检查的内容也只限于数据的形式和取值的范围,不包括有关业务本身的处理逻辑。
§为使用户能直观地进行操作,通常使用图形用户界面GUI ,操作简单、易学易用;
§在变更时,只需要改写显示控制和数据检查程序,而不影响其他层;
§不包含或包含一部分业务逻辑。
功能层:
§应用系统的主体,包括大部分业务处理逻辑(通常以业务组件的形式存在,如JavaBean/EJB/COM等);例如,在制作订购合同时要计算合同金额,按照定好的格式配置数据、打印订购合同。
§从表示层获取用户的输入数据并加以处理;
§处理过程中需要从数据层获取数据或向数据层更新数据;
§处理结果返回给表示层。
§用户检索数据时,要设法将有关检索要求的信息一次性地传送给功能层,而由功能层处理过的检索结果数据也一次性地传送给表示层。
§通常,在功能层中包含有确认用户对应用和数据库存取权限的功能以及记录系统处理日志的功能。
数据层:
§数据库管理系统DMBS,负责管理对数据库数据的读写;
§接受功能层的数据查询请求,执行请求,并将查询结果返回给功能层;
§从功能层接受数据存取请求,并将数据写入数据库,请求的执行结果也要返回给功能层。
§数据库管理系统必须能迅速执行大量数据的更新和检索。现在的主流是关系型数据库管理系统,因此,一般从功能层传送到数据层的要求大都使用SQL语言。
优点:
§在用户数目较多的情况下,三层C/S结构将极大改善性能与灵活性(通常可支持数百并发用户,通过集群可达数万并发用户);
§允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,能提高系统和软件的可维护性和可扩展性——UI、BL、DB可以分别加以复用
§允许更灵活有效地选用相应的平台和硬件系统,使
之在处理负荷能力上与处理特性上分别适应于结构清晰的三层; 并且这些平台和各个组成部分可以具有良好的可升级性和开放性。
§应用的各层可以并行开发,可以选择各自最适合的开发平台和开发语言。
§利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而非法的访问数据层,为严格的安全管理奠定了坚实的基础。
§将遗留系统(旧版本的系统)移植到三层C/S下将非常容易;
缺点:
§三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。
§设计时必须慎重考虑三层间的通信方法、通信频度及数据量,这和提高各层的独立性一样是三层C/S结构的关键问题——分层风格的固有缺点。
程序:
(1)服务器端程序tcpServer.java
import java.io.*;
import java.net.*;
public class tcpServer{
publicstatic final int PORT=8888;
publicstatic void main(String[] args) throws IOException{
//建立ServerSocket
ServerSocket s=new ServerSocket(PORT);
System.out.println("ServerSocket:"+s);
try{
/*程序阻塞,等待连接。即直到有一个客户请求到达,程序方能继续执行*/
Socket ss=s.accept();
System.out.println("Socketaccept:"+ss);
try {
//连接成功,建立相应的I/O数据流
DataInputStream dis=newDataInputStream(ss.getInputStream());
DataOutputStream dos=new DataOutputStream(ss.getOutputStream());
//在循环中,与客户机通信
while(true){
String str=dis.readUTF(); //从客户机中读数据
if(str.equals("end"))break; //当读到end时,程序终止
System.out.println(str);
dos.writeUTF("Echoing:"+str); //向客户机中写数据
}
dos.close();
dis.close();
}finally{
ss.close();
}
}finally{
s.close();
}
}
}
服务器端运行结果为:
ServerSocket:ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8888]
Socket accept:Socket[addr=/127.0.0.1,port=7312,localport=8888]
测试:0
测试:1
测试:2
测试:3
测试:4
测试:5
(2)客户机端程序tcpClient.java
import java.io.*;
import java.net.*;
public class tcpClient{
public static voidmain(String[] args) throws IOException{
//建立Socket,服务器在本机的8888端口处进行“侦听”
Socket ss=newSocket("127.0.0.1",8888);
System.out.println("Socket:"+ss);
try{
//套接字建立成功,建立I/O流进行通信
DataInputStreamdis=new DataInputStream(ss.getInputStream());
DataOutputStreamdos=new DataOutputStream(ss.getOutputStream());
for(int i=0;i<6;i++){
dos.writeUTF("测试:"+i); //向服务器发数据
dos.flush(); //刷新输出缓冲区,以便立即发送
System.out.println(dis.readUTF()); //将从服务器接收的数据输出
}
dos.writeUTF("end"); //向服务器发送终止标志
dos.flush(); //刷新输出缓冲区,以便立即发送
dos.close();
dis.close();
}finally{
ss.close();
}
}
}
B/S三层架构:
浏览器/服务器(B/S)是三层C/S风格的一种实现方式
–表现层:浏览器
–逻辑层:? Web服务器? 应用服务器
–数据层:数据库服务器
基本组件:
–数据库服务器? 存放数据的数据库、负责数据处理的业务逻辑;
–Web服务器/应用服务器? 业务逻辑:对数据进行处理;? 客户端应用程序以网页形式存放于Web服务器上;
–浏览器? 在客户端上的浏览器中键入相应的网址
连接件:经由网络的调用-返回机制或隐式调用机制
–浏览器?àWeb服务器/应用服务器:浏览器向Web服务器/应用服务器发送请求,并接收返回结果。
–Web服务器/应用服务器?à数据服务器: Web服务器/应用服务器向数据服务器发送请求,并接收返回结果。
优点:
基于B/S体系结构的软件,系统安装、修改和维护全
在服务器端解决,系统维护成本低:
–客户端无任何业务逻辑,用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。
–良好的灵活性和可扩展性:对于环境和应用条件经常变动的情况,只要对业务逻辑层实施相应的改变,就能够达到目的。
§ B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。
§较好的安全性:在这种结构中,客户应用程序不能直接访问数据,应用服务器不仅可控制哪些数据被改变和被访问,而且还可控制数据的改变和访问方式。
§三层模式成为真正意义上的“瘦客户端”,从而具备了很高的稳定性、延展性和执行效率。
§三层模式可以将服务集中在一起管理,统一服务于客户端,从而具备了良好的容错能力和负载平衡能力。
§扩大了组织计算机应用系统功能覆盖范围,可以更加充
分利用网络上的各种资源,同时应用程序维护的工作量
也大大减少
– B/S结构出现之前,管理信息系统的功能覆盖范围主要是组
织内部。
– B/S结构“零客户端”方式使组织的供应商和客户(这些供应商和客户有可能是潜在的,也就是说可能是事先未知的)的计算机方便地成为管理信息系统的客户端,进而在限定的功能范围内查询组织相关信息,完成与组织的各种业务往来的数据交换和处理工作。
§ B/S结构的计算机应用系统与Internet的结合也使新近提出的一些新的企业计算机应用(如电子商务,客户关系管理)的实现成为可能。
缺点:
§客户端浏览器以同步的请求/响应模式交换数据,每请求一次服务器就要刷新一次页面;
§受HTTP协议“基于文本的数据交换”的限制,在数据查询等响应速度上,要远远低于C/S体系结构;
§数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用;
§受限于HTML的表达能力,难以支持复杂GUI(如报表等)。
程序:
前台界面代码:
<%@ Page Language="C#" AutoEventWireup="true"CodeBehind="Default.aspx.cs" Inherits="TestWeb1._Default"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>前台界面</title>
</head>
<body>
<formid="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
服务器代码:
using System;
usingSystem.Collections;
usingSystem.Configuration;
using System.Data;
using System.Linq;
using System.Web;
usingSystem.Web.Security;
using System.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace TestWeb1
{
public partial class _Default :System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
string strselect = "selectLoginName,UserName from Users";
string strCN =@"server=.\SQLEXPRESS;database=Business;Integrated Security=True";
SqlDataAdapter ad = new SqlDataAdapter(select_str,strCN);
DataSet ds = new DataSet();
ad.Fill(ds, "mytable");
DataTable dt = ds.Tables[0];
string str="<ul>";
foreach (DataRow row in dt.Rows)
{
str+="<li>"+row[0]+"||"+row[1]+"||"+row[2]+"<li>";
}
str += "</ul>";
Response.Write(str);
}
}
}
C/S+B/S混合体系结构:
–混合原则一:“内外有别”的原则
–混合原则二:“查改有别”的原则
§混合原则一:“内外有别”的原则:
–企业内部用户通过局域网直接访问数据库服务器
? C/S结构;
? 交互性增强;
? 数据查询与修改的响应速度高;
–企业外部用户通过Internet访问Web服务器/应用服务器
? B/S结构;
? 用户不直接访问数据,数据安全;
§ “内外有别”模型的缺点是企业外部用户修改和维护数据时,速度较慢,较繁锁,数据的动态交互性不强
§混合原则二:“查改有别”的原则:
–不管用户处于企业内外什么位置(局域网或Internet),凡是需要对数据进行更新(维护和修改数据)操作的(Add, Delete, Update),都需要使用C/S结构;
–如果只是执行一般的查询与浏览操作(Read/Query),则使用B/S结构。
§ “查改有别”模型体现了B/S体系结构和C/S体系结构的共同优点。
§但因为外部用户能直接通过Internet连接到数据库服务器,企业数据容易暴露给外部用户,给数据安全造成了一定的威胁。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/alvin930403/article/details/46907645