畅玩SpringMVC:了解MVC设计模式+SpringMVC+基于源码分析执行过程

2023-05-16

文章目录

  • 1、MVC设计模式+开头
  • 2、MVC架构
    • 2.1、优点
    • 2.2、缺点
  • 3、SpringMVC
    • 3.1、执行过程
    • 3.2、一探源码(重)
      • 3.2.1、DispatcherServlet
        • 先来看看DispatcherServlet的`无参构造方法`:
        • 再来看看DispatcherServlet的`有参构造方法`:
        • 🟥重点的几个方法
        • 大致的执行步骤
        • 继承关系

1、MVC设计模式+开头

🟩🟩🟩
JAVAEE体系结构包括4层,从上至下分别是应用层、Web层、业务层、持久层。Spring是业务层的框架,Mybatis是持久层框架。springmvc则是Web层的框架

既然要了解SpringMVC,那么起码要了解什么是MVC吧🦘
🟨🟧🟥

2、MVC架构

模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
🍄
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
🍄
MVC指MVC模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。
在这里插入图片描述

2.1、优点

1.耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

2.重用性高
MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。

3.部署快,生命周期成本低
MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

4.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。

2.2、缺点

1.完全理解MVC比较复杂。
由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程。

2.调试困难。
因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。

3.不适合小型,中等规模的应用程序
在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。

4.增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

💥如何选择一个好的框架应用在项目中,将会对项目的效率和可重用是至关重要的。

3、SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架。

🔺❗❗❗应用特点:分离了控制器、模型对象、易于同其它View框架无缝集成

3.1、执行过程

springmvc的总控制器是DispatcherServlet(前端控制器),用户发的所有请求,都会被这个控制器拦截
下面是狂神说中的一个图,这个图非常nice❤实线表示系统帮我们实现,虚线表示要我们去实现
在这里插入图片描述

3.2、一探源码(重)

3.2.1、DispatcherServlet

在springmvc中,只要你发送了请求(这里不考虑不走DispatcherServlet的情况,默认为都会走这个处理器),请求就会经过DispatcherServlet(前端控制器),他也是SpringMVC的中央处理器💘
🔷DispatcherServlet继承了FrameworkServlet

先来看看DispatcherServlet的无参构造方法

	public DispatcherServlet() {
		super();
		setDispatchOptionsRequest(true);
	}

其中,setDispatchOptionsRequest(true)这个方法是来自FrameworkServlet,该方法的大概含义:

🟩设置这个servlet是否应该发送一个HTTP OPTIONS请求到 {@link #doService}方法。 这通常意味着你的控制器将接收到这些请求; 确保 这些端点实际上能够处理一个OPTIONS请求。
🟨该方法创建一个了新的DispatcherServlet,它将根据默认值和通过servlet init-params提供的值创建自己的内部web应用上下文。
🔺可以看到这里默认是开启的,所以就像上面说的,默认所有的请求都会走这里!

再来看看DispatcherServlet的有参构造方法

public DispatcherServlet(WebApplicationContext webApplicationContext) {
	super(webApplicationContext);
	setDispatchOptionsRequest(true);
}

有参构造很有意思,WebApplicationContext 继承了ApplicationContext
🟩它是根据使用给定的web应用程序上下文创建一个新的DispatcherServlet。

🟥重点的几个方法

在这里插入图片描述

大致的执行步骤

第一步:用户发起请求到前端控制器(dispatcherservlet)

第二步:前端控制器请求处理器映射器(handlermappering)去查找处理器(handle):通过xml配置或者注解进行查找

第三步:找到以后处理器映射器(handlermappering)像前端控制器返回执行链(handlerexecutionchain),handlerexecutionchain就相当于获取到最终要出的handler

第四步:前端控制器(dispatcherservlet)调用处理器适配器(handleradapter)去执行处理器(handler)

第五步:处理器适配器去执行handler

第六步:handler执行完给处理器适配器返回modelandview

第七步:处理器适配器向前端控制器返回modelandview

第八步:前端控制器请求视图解析器(viewresolver)去进行视图解析

第九步:视图解析器像前端控制器返回view

第十步:前端控制器对视图进行渲染

第十一步:前端控制器向用户响应结果

继承关系

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

畅玩SpringMVC:了解MVC设计模式+SpringMVC+基于源码分析执行过程 的相关文章

随机推荐