在Web开发中,我们通常都要用到MVC模式,以此来实现模块化和操作展现分离。那么Web和MVC是怎样做到藕断丝连呢?(相互独立,但又有紧密联系)

我们来以一个实际的例子来分析一下。

假设有个人(姑且称呼其为张三),他通过电脑或手机来访问某个网站(姑且命名为A网站),整个的过程应该如下:

先描述一遍网络连接和传输过程

  1. 张三打开浏览器,Chrome、Firefox或者IE都行
  2. 在地址栏中输入网址(假设是用户输入,实际情况可能是用户点了一个按钮,或者点了一个链接)
  3. 浏览器根据网址中的域名部分,通过DNS(域名解析服务)获得网站所在的服务器,浏览器开始和服务器建立网络连接
  4. 浏览器将网址中域名后的部分(URL)以及其他的内容,作为请求,发送给服务器
  5. 服务器根据所发送的内容,执行一系列的动作,生成反馈结果,发送会给浏览器(反馈结果可以是HTML、JS、图片、视频、音频等等)
  6. 浏览器收到反馈结果,开始解析并显示成页面
  7. 至此,张三就能看到他想看到(或者是网站想让他看到)的页面

这里可以看到,网站接收一个请求,再回赠一个反馈。

在这个请求中,URL是关键,我们把网站比喻为一个小区的话,这个URL就是具体的几栋几零几这样的详细地址了。

Web与MVC发生第一次的关联,就在于URL和MVC模式中的Router(路由)的关联了。

因此,所有实现MVC模式的框架,它一定会要求所有URL都集中从一个入口进入开始处理,这种集中方式又分如下两种方式实现:

  1. 强制要求所有URL的格式统一。
    例如URL设置为 /index.php/article/list/page/2这样的,这个请求第一步到达index.php,/article/list/page/2作为需处理的路由路径,由index.php进行处理并指派到具体的Controller。
  2. 设置Web服务软件,由它处理路由路径,指派到具体的Controller
    上述例子,URL可以被设置为/article/list/page/2,无论是IIS还是Apache、Tomcat等都支持URL的Rewrite(重定向),对于路有路径可以直接处理,重定向到具体的Controller。

至此,我们就建立了 URL =〉Router =〉Controller的链接,那么浏览器发出的其他内容,包括Request、Form、Querystring、Session、Environment等等,也都一并传给了Controller,Controller据此可以开始进行相应的业务处理。

Controller处理过程中,会涉及到Model的操作和改变。

Controller处理到最后,将会给出一个具体反馈。

至此,Web和MVC就藕断丝连的绑定在一起了。

发表评论