• 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的时候,系统结构图如下:

      

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

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

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

      

      

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

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

      示例Demo:有空再说!

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

      原因:标准的MVC中,View在客户端,Model在服务器;

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

         这是不可能的!

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

    web实现改进型MVC:

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

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

      接和逻辑层交互。

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

      

        更狠一点的!如图:

      

      基本实现方式:

        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");

  • 相关阅读:
    BZOJ2870 最长道路
    BZOJ1316 树上的询问
    BZOJ2238 Mst
    BZOJ4242 水壶
    [BeiJing2010组队]次小生成树Tree
    CODEVS1403 新三国争霸
    牛客网NOIP赛前集训营-提高组(第六场) C-树
    JSOI2008 最小生成树计数
    BZOJ2654 Tree
    牛客网NOIP赛前集训营-提高组(第六场)B-选择题
  • 原文地址:https://www.cnblogs.com/felixzh/p/4625599.html
Copyright © 2020-2023  润新知