- 疑惑
- 与C/S的不同
- 数据传递机制
- WEB特有属性
- 前台与后台的定义
- 示例
- 数据传递机制
- Response和Request
- 服务端控件
- IsPostBack
- 文尾
疑惑
话说接触web开发有一段时间了,习惯于以前的C/S,理解起B/S中一些概念还是有些困难,例如最常用的Ispostback、客户端与服务端的交互以及ASP.NET中的一些独有属性。
与C/S的不同
B/S(Browser/Server,浏览器/服务器模式),由于浏览器是现在最常用的软件,这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用,浏览器通过Web Server同数据库进行数据交互。C/S(Client/Server,客户机/服务器) ,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。
C/S和B/S的不同之处还很多,各有优劣,在此不一一介绍。从部署上说,都是服务端/客户端组成,只不过是一个是必须和服务端软件一一对应,另外一个的客户端是浏览器而已。但正是这个貌似简单的不同,让安百般理解不通。
数据传递机制
这点也是对web系统中非常重要但是又让安“迷茫”的一个原因,C/S的容易理解,数据在客户端形成数据包通过协议传给服务端,虽然B/S原理也是如此,但是因为前后台代码在同一个界面,也让俺甚是不解。
web特有属性
这个也不用说,什么session、Request、Response、表单、ispostback等。
这些都是想要跨入web开发必须掌握的基础知识,一下用几个简单明了的示例结合图片对这些疑惑稍作解答。
前台与后台的定义
前台与后台,这定义在C/S中可木有,因为我们一般做例子都在同一台机器,理解不出来,在我看来,所谓前台就是界面,即以后会生成html
示例
数据传递机制
先看一幅简单明了的图片:
其中上面的主机代表服务器,下面的显示器代表浏览器,箭头代表传递方向,数字代表传递顺序。数据传递流程是这样的:
1、首先是用浏览器发出访问请求,就像是你输入网址(例如http://www.aiting.tk)请求访问该网址。
2、然后在服务器处理该命令,生成html页返回给浏览器。
3、浏览器收到html页后,要进行下一步操作,比如说点击某个按钮,把操作及数据回发(下面理解ispostback会使用到)给服务器。
4、如果有必要,服务器判断是否是回发信息选择不同的处理方法,处理完后再向浏览器返回一个html页。
5、浏览器显示处理后的html页,至此一个数据传递流程完成。
需要说明的是,浏览器上显示的信息和服务端控件,貌似是你一点就会有反馈,其实你看到的只是一个静态的html页,真正的数据和处理都需要服务器来执行。
Response和Request
这两个概念也是像安这样初学者认为难啃的硬骨头,我们同样以一幅简单易懂的图片来解释:
左面这幅图是浏览器显示的静态html页,右面的是服务器的aspx页,细心点从地址栏就能看出来。其实我们"断章取义"就能看出这两个概念的大致作用。Request(请求)是将信息从浏览器发送给服务器;Response(响应)是将信息由服务器发送给给浏览器。我们上面的客户端与服务端数据传递流程再解释一次:
1、首先,浏览器输入想要访问的地址。
2、服务器接收到该相应,处理后发送给浏览器一个含有“姓名”、“国家名称”和“提交”按钮的html页面。
3、浏览器出现该html页面后,用户输入“Ritcha”和“USA”,点击“提交”按钮。
4、服务端收到回发的数据后,命令页面显示“您好,Ritcha,欢迎使用ASP.NET!”。
IsPostBack
IsPostBack,意为浏览器回发给服务器。在web开发中,IsPostBack 的使用比不可少,虽然用起来也非常简单,但是理解起来却是有点难度,尤其是对安这用思维逻辑甚是简单的人。上面提到数据在服务器和浏览器之间传递时,服务端会判断是否是回发信息,进而选择处理的方式,这个在很多情况下是必要的,例如Page_Load页面加载,如果每次刷新页面都需要重新绑定,会浪费不必要的软硬件资源,这时可以判定是否是回发页面进而决定是否重新绑定。下面用简单的例子说明IsPostBack 的作用。
不使用IsPostBack时:
前台界面:
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
txtUserName.Text = "";//清空用户名
txtPWD.Text = ""; //清空密码
}
protected void Button1_Click(object sender, EventArgs e)
{
if (txtPWD .Text =="a" && txtUserName .Text=="a")
{
//账号密码均正确则登录成功
Response.Write("登录成功");}
else
{
//否则登录失败
Response.Write ("登录失败");
}
}
运行结果:
结果分析:Page_Load事件会把用户名和密码清空,即使按F5刷新,也会登录失败,这是因为每次点击Login按钮都会执行Page_Load时间,所以会一直登录失败。
使用 IsPostBack:
前台界面相同,后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack )//如果不是回发页面则执行以下代码
{
txtUserName.Text = "";//清空用户名
txtPWD.Text = ""; //清空密码
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (txtPWD .Text =="a" && txtUserName .Text=="a")
{
//账号密码均正确则登录成功
Response.Write("登录成功");}
else
{
//否则登录失败
Response.Write ("登录失败");
}
}
运行结果:
结果分析:因为在Page_Load里面加入了IsPostBack验证,首次加载的作用是清空原有的“txtUserName”和“txtPWD”,相当于填写账户密码的界面是回发页面,不需要清空用户名和密码,所以登录成功。我学的时候教程解释的是是否第一次加载页面,实际上是一样的:是回发则证明不是第一次加载,反之,不是回发说明这是客户端第一次加载页面(结合上面介绍的浏览器与服务器数据传递流程)。
服务端控件
上面我们提到,服务端的控件,只要用户操作,不管里面有没有方法体都会执行,还用刚才说明IsPostBack的前台界面,后台代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//如果不是回发页面则执行以下代码
{
txtUserName.Text = "";//清空用户名
txtPWD.Text = ""; //清空密码
}
else
{
//否则登录失败
Response.Write("登录失败");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
}
运行结果:
结果分析:如代码所示,即使login按钮的代码为空,仍然会执行Page_Load中的代码,说明服务器端控件,你有动它就动。
文尾
文档到此就要告一段路,基本上把我当时的基础概念理解疑问,全部自问自答。如果哪里表达有误,欢迎指正共同进步!