MVC

来源:互联网 发布:学校网络监控方案 编辑:程序博客网 时间:2024/05/29 19:05

1.什么是MVC?

          MVC 全名是Model  Veiw  Controller,是模型(model)——视图(view)——控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑,,数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化用户界面的结构中。

MVC 编程模式

编辑
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:[1] 
  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
                  通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。
               通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。
                           通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

框架内容

MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。

优点
:耦合性低,重用性高,生命周期成本低,部署快,可维护性高,有利软件工程化管理
缺点:没有明确的定义。
         不适合小型,中等规模的应用程序。
         视图与控制器间的过于紧密的连接。
         视图对模型数据的低效率访问。
         一般高级的界面工具或构造器不支持模式。
 
2.自定义MVC的步骤:

1.定义一个servlet(ActionServlet)控制所有的*.do请求

2.获取请路径(request.getRequestURI()),截取到后面的请求名(cname)

3.在web-inf下创建一个config.properties文件,保存一个键值对,根据不同的请求得到其对应的Class,同时创建好对应的处理列。

4.在servlet的init方法中加载配置文件
      Properties config=new Properties();
      String path=this.getServletContext.getRealPath();//得到其绝对路径
      path=path+"/WEB-INF/config.properties";
      config.load(new FileInputStream(path));//加载到内存中来
      this.getServletContext.setAttribute("config",config);//存入到application中

5.到dopost方法中取出application中的数据,结合前面取到的请求名得到其对应的类名
      Properties config=(Properties)this.getServletContext.getAttribute("config");
      String className=config.getProperty(cname);

6、将"/WEB-INF/config.properties"存入到web.xml文件中,并通过代码取出
     String sname=this.getServletContext().getInitParameter("config");

7、根据取出来的类名(全路径名),实例化对象
     Class.forName(classname).newInstance();

8、新建一个接口(Action),声明方法execute();将所有的实现类继承action接口

9、将Class.forName返回的对象统一为转换为Action,再统一的调用execute()方法(多态)

10、修改接口的方法execute(),让其带参数(request,response),其所有的继承类对应的做修改,保证 能从ActionServlet传送到对应页面

11、将Action存入到一个池中,步骤:先在init方法中建立一个池(Properties),再在dopost方法中判断,以保证每一个类只会 被实例化一次