MVC设计模式(jsp+servlet)

MVC就是模型(model)-视图(view)-控制器(control)三者的结合,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来实现客户端浏览器请求,将众多的业务逻辑聚集到model层的biz中,将需要操作第三方数据库的具体操作封装在model的dao层;将个性化定制界面展示集中于view层,最后control层的servlet将model层的数据和view层的界面处理结合,带到客户端请求的浏览器界面去,实现客户端的需求。 MVC能够在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

MVC结构

在这里插入图片描述
如上图所示,客户端的一次请求由红线发起,先到web容器中找到web.xml对应的servlet.java文件(实际上是以键值对的方式储存的,根据键web.xml找对应的值servlet.java),然后去调用control对应的sevlet,然后调用对应model层封装的业务逻辑,而model层通常访问数据库,(蓝线开始)将对数据库增删改查的数据带到model层中再移交给control层,同时将view层的jsp文件整合返还给客户端的浏览器界面,完成一次请求业务。MVC分为模型(Model)、视图(View)、控制器(Controll):

  • V即View视图是指用户看到并与之交互的界面,在javaweb中常用的就是jsp文件。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
  • M即model模型是指模型表示业务规则。java中可以理解为base(jdbc)+dao(jdbcseal)+biz(business)。base就是jdbc,数据库访问对象的创建,关于这一点可以参考https://blog.csdn.net/BigData_Hobert/article/details/107301740的介绍,dao我上面提到过就是利用base去访问数据库进行增删改查的操作层的封装;而biz是面向众多业务逻辑的封装。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
  • C即control控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

MVC优缺点

MVC的优点:

1.耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.重用性高
MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。
3.部署快,生命周期成本低
MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
4.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。

MVC的缺点:

1.完全理解MVC比较复杂。
由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程。
2.调试困难。
因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。
3.不适合小型,中等规模的应用程序
在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。
4.增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

javaWeb MVC的工作原理

在这里插入图片描述

第一次请求(黑线路径)

  1. 用户输入连接访问,服务启动初始化webAPP
  2. 读取web.xml文件,初始化上下文参数context-param
  3. 初始化侦听器listener的init方法
  4. 初始化过滤器的filter的init方法
  5. 读取web.xml中的welcome-file-list,寻找servlet配置的键值对,根据值servlet-mapping中url-pattern寻找对应的键servlet-name,然后匹配配置的servlet对应的servlet-name名字下的servlet-class类,去调用control层该类的方法,初始化界面
  6. 初始化界面,第一次,请求执行三次,三次全部通过,方能正常运行,将数据和界面返回浏览器窗口
  7. 用户接收到浏览器的反馈。

第二次请求

请求未知的界面(蓝线路径)
  1. 用户输入未知的xxx.jpg网址或者错误、不存在的网址
  2. 服务器判断其不存在,直接返回404错误提示界面
直接请求jsp界面(绿线路径)
  1. 用户输入xxx.jsp的路径
  2. 服务器判断,直接去view层去调用对应的jsp文件,反馈客户端浏览器
  3. 用户接收到浏览器的反馈
请求xxx界面(橙线路径)
  1. 用户输入xxx的路径
  2. 服务器调用侦听器listener的doFilter方法,对请求和反馈进去侦听,通常这里是配置文件的正确性。调用过滤器filter的doFilter方法,对请求和反馈进去过滤,通常在这里是规范请求和反馈的编码格式
  3. 读取web.xml中的welcome-file-list,寻找servlet配置的键值对,根据值servlet-mapping中url-pattern寻找对应的键servlet-name,然后匹配配置的servlet对应的servlet-name名字下的servlet-class类,去调用control层该类的方法,初始化界面
  4. 整合数据和view,将界面反馈给浏览器
  5. 用户接收到浏览器的反馈

猜你喜欢

转载自blog.csdn.net/BigData_Hobert/article/details/107589071