天天看点

MVC

为何需要mvc?

  最早期的javaweb开发:servlet==java+"html",问题:在servlet中拼接字符串太麻烦

  后来出现jsp:==html+java在html中嵌套java代码, 问题:页面和逻辑太过于混杂

  最终导致:mvc的诞生!

  mvc是一种架构型的模式,本身不引入新的功能,就是指导我们把web应用结构做好

  特点:与功能无关

  目标:实现逻辑与页面相分离

mvc模式:model、view、control 即:模型、视图、控制器

  1:模型:包含应用程序的    业务逻辑    和    业务数据

  2:视图:包含应用程序的输出形式,即:页面或界面

  3:控制器:负责协调模型和视图;

        根据用户请求来选择要调用哪个模型来处理业务

        以及最终哪个视图为用户做出应答!

  

  mvc中的模型和视图是分离的、解耦的,同一个模型可以对应多种不同的视图

  具体功能:

  model:

  封装应用状态                    --------->数据封装

  响应状态查询                    ---------->获取数据

  暴露应用的功能                  ----------->逻辑层api

  view:

  提供html form用于用户请求 ------->人机交互

  请求模型的更新                   ------->触发事件

  产生html响应                    ------->展示数据

  controller:

  接收并验证http请求的数据    -------->收集数据并封装数据

  将用户数据与模型的更新相映射-------->调用逻辑层api

  选择用于响应的视图     --------->根据返回值选择下一个页面

 纯jsp应用

      无mvc的时候,系统结构图如下:

MVC

   这种结构不太好,在jsp页面写的代码太多,尤其是控制代码,业务和逻辑

  太过混杂,因此需要引入一个中间层----控制器来专门处理控制代码

  标准的mvc组建关系图如下:

MVC
MVC

桌面级开发实现标准的mvc:

  应用观察者模式,可以实现标准的mvc

  示例demo:有空再说!

web企业级开发无法实现标准的mvc:

  原因:标准的mvc中,view在客户端,model在服务器;

     那就是:当服务器这边数据更新了,它通知客户端那边跑着的html自动刷新

     这是不可能的!

     html在不重新装载页面的情况下,是不可能刷新的!

web实现改进型mvc:

  在实际开发web应用的时候,大多数情况是不会按照标准mvc做的,事实上也很难做到

  通常我们都会把逻辑部分移动到逻辑层,model只用来封装数据,即vo;view一般不直

  接和逻辑层交互。

  逻辑层的交互都由控制器做,view只和控制器交互!如图:

MVC

    更狠一点的!如图:

MVC

  基本实现方式:

    view:jsp

    controller:servlet

    model:javabean

   从控制器如何传递值到jsp实现?

  如果把jsp页面看作servlet,那么就是从一个servlet向另一个servlet传递参数

  方法:request(线程安全)、session(非线程安全,但很少并发,除非恶心操作)、servletcontext(非线程安全)

  对象:  同一个request请求          同一个客户端(不区分servlet)                            所有servlet(不区分客户端,不区分servlet)                    

  注意:

       建议首选request。但是该方式下,如果跳转页面,由于是同一个request

   所以,跳转方式只能用

         this.request.getrequestdispather("/your servlet url").forward(request,response);

   另一个方式:respose.sendredirect("/your servlet url");

欢迎关注微信公众号:大数据从业者

继续阅读