MVC是什么?
在讲SpringMVC之前我们先来看一下什么是MVC模式~
MVC:MVC是一种设计模式
MVC的原理图:
分析:
M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)
V-View 视图(做界面的展示:jsp,html……)
C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)
Spring MVC是什么?
SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,SpringMVC就相当于是Struts2加上Spring的整合,但是这里有一个疑惑就是,SpringMVC和Spring是什么样的关系呢?这个在百度百科上有一个很好的解释:意思是说,SpringMVC是Spring的一个后续产品,其实就是Spring在原有基础上,又提供了web应用的MVC模块,可以简单的把SpringMVC理解为是Spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说SpringMVC和Spring无缝集成,其实SpringMVC就是Spring的一个子模块,所以根本不需要同Spring进行整合。
Spring MVC的原理图:
Spring MVC的工作机制
每当用户在Web浏览器中点击链接或提交表单的时候,请求就开始工作了。从离开浏览器开始到获取响应返回,它会经历好多站,在每站都会留下一些信息同时也会带上其他信息。
在请求离开浏览器时,会带有用户所请求内容的信息,至少会包含请求的URL,但是还可能带有其他的信息,例如用户提交的表单信息。
请求的整个过程大概是这个样子的:
请求旅程的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。
前端控制器是常用的Web应用程序模式,在这里一个单实例的Servlet将请求委托给应用程序的其他组件来执行实际的处理。在Spring MVC中,DispatcherServlet就是前端控制器。
DispatcherServlet将请求发送给Spring MVC控制器。控制器是一个用于处理请求的Spring组件。在典型的应用程序中可能会有多个控制器,DispatcherServlet需要知道应该将请求发送给哪个控制器。所以DispatcherServlet会查询一个或多个处理器映射,来确定请求的下一站。处理器映射根据请求所携带的URL信息来进行决策。
请求到了控制器,会卸下负载,即用户提交的表单,并耐心等待控制器处理这些信息。
控制器在完成逻辑处理后,通常会产生一些信息,这些信息需要返回给用户并在浏览器上显示。这些信息被称为模型。不过仅仅给用户返回原始的信息是不够的,信息需要以用户友好的方式进行格式化(HTML),发送给一个视图(JSP)。
控制器所做的最后一件事就是将模型数据打包,并且标示出用于渲染输出的视图名。它接下来会将请求连同模型和视图相耦合,传递给DispatcherServlet。
这样,控制器就不会与特定的视图相耦合,传递给DispatcherServlet的视图名并不直接表示某个特定的JSP。实际上,它甚至不能确定视图就是JSP。相反,它仅仅传递了一个逻辑名称,这个名字将会用来查找产生结果的真正视图。DispatcherServlet将会使用视图解析器来将逻辑视图名匹配为一个特定的视图实现,它可能也可能不是JSP。
最后一站就是视图的实现,在这里交付模型数据,请求的任务完成。
视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端。
可以看到,请求要经过很多步骤才能形成返回给客户端的响应。大多数步骤都是在Spring框架内部完成的。
总结出来就是以下几点:
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle),通过xml配置或者注解进行查找
第三步:找到以后处理器映射器向前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器调用处理器适配器(HandlerAdapter)
第五步:处理器适配器去执行处理器
第六步:处理器执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器向前端控制器返回View
第十步:前端控制器对视图进行渲染
第十一步:前端控制器向用户响应结果
理解SpringMVC中的几个组件:
前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU
处理器映射器(HandlerMapping):根据URL去查找处理器
处理器(Handler):需要程序员去写代码处理逻辑的,即Controller
处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面