若只如初见——WEB/BS开发必备基础知识

  • 疑惑
    • 与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中的代码,说明服务器端控件,你有动它就动。

文尾

       文档到此就要告一段路,基本上把我当时的基础概念理解疑问,全部自问自答。如果哪里表达有误,欢迎指正共同进步!

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值