spring mvc 的工作流程是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mvc 的工作流程是啥相关的知识,希望对你有一定的参考价值。

spring mvc 的工作流程:

1、用户发送请求至前端控制器DispatcherServlet。

2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet调用HandlerAdapter处理器适配器。

5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、Controller执行完成返回ModelAndView。

7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 

11、DispatcherServlet响应用户。

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。

SpringMVC是一种web层的mvc框架,用于替代servlet(处理响应请求,获取表单参数,表单验证等)。

 MVC即Model-View-Controller,将应用按照Model(模型)、View(视图)、Controller(控制)这样的方式分离。

视图(View):代表用户交互界面,对于Web应用来说,可以是html,也可能是jsp、XML和Applet等。

一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。

模型(Model):是业务的处理以及业务规则的制定。模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计是MVC最主要的核心。

MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,抽象与具体不能隔得太远,也不能太近。

MVC并没有提供模型的设计方法,而只是组织管理这些模型,以便于模型的重构和提高重用性。

控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。

划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。

参考技术A

MVC(Model-View-Controller)三元组的概念:

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作,。

参考技术B 说简单了就是 Controller--》Service --》 Repository
复杂点说 就涉及到它的设计思想
参考技术C Spring Web MVC 处理Http请求的大致过程:
一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。
在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。
Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。
一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。
如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。
DispatcherServlet将View对象渲染出的结果返回个客户。本回答被提问者和网友采纳

Spring MVC 控制器方法的有效返回类型是啥?

【中文标题】Spring MVC 控制器方法的有效返回类型是啥?【英文标题】:What are valid return types of a Spring MVC controller method?Spring MVC 控制器方法的有效返回类型是什么? 【发布时间】:2015-06-04 15:02:36 【问题描述】:

我在 Spring MVC 方面没有太多经验,我有以下关于控制器方法可以返回的有效返回类型是什么

所以我知道用户生成了一个 HttpRequest,由 DispatcherServlet 接收和处理,该 DispatcherServlet 将该请求分派到特定的控制器类。

控制器类是这样的:

@Controller
public class AccountController 

    @RequestMapping("/showAccount")
    public String show(@RequestParam("entityId") long id, Model model) 
        ...
    

    .......................................
    .......................................
    .......................................

所以我知道每个方法都处理一个特定的请求,并且处理的请求由 @RequestMapping 注释指定。

我也知道该方法返回一个 String 对象,它是 逻辑视图名称(然后由 视图解析器解析为渲染视图)

所以,在这个阶段,我认为控制器类的方法只返回 String 对象。但我不确定。也许像这样的方法也可以返回一些不同类型的对象?

【问题讨论】:

有很多返回类型,你可以返回你需要的,检查这个***.com/questions/7383622/… Craig Walls 的“Spring in Action”非常适合解释 Spring MVC 这在 Spring 文档中有非常详尽的介绍:docs.spring.io/spring/docs/current/spring-framework-reference/… 【参考方案1】:

Handler 方法有多种返回类型可用,在控制器内部由@RequestMapping 注释,例如:

ModelAndView(类)

模型(接口)

地图 字符串 无效 查看 HttpEntity<?>ResponseEntity<?> HttpHeaders

还有更多.....See Docs

每种返回类型都有其特定用途,例如:如果您使用字符串,则表示返回视图名称,此视图名称将由ViewResolver 解析。如果您不想返回任何视图名称,请提及返回类型为void。如果您想设置视图名称以及发送一些数据到视图,请使用ModelAndView 作为返回类型。

请阅读文档,您还将了解可以在处理程序方法中传递什么样的方法参数。

【讨论】:

【参考方案2】:

您在doc有直接答案

特别注意

如果方法被@ResponseBody注解,返回类型为 写入响应 HTTP 正文。返回值将被转换 使用 HttpMessageConverters 到声明的方法参数类型。

当方法被 @ResponseBody 注释时,返回类型可以是任何自定义类型,任何 Java pojo,框架将转换为适当的表示 JSON、XML 等并写回到响应体

【讨论】:

【参考方案3】:

您可以查看AnnotationMethodHandlerAdapter#getModelAndView。该方法有几个条件根据返回类型来选择如何处理返回值。

【讨论】:

以上是关于spring mvc 的工作流程是啥的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc的工作流程是啥?

spring mvc 是啥

spring mvc的运行原理是啥,m代表啥,v代表啥,v包含些啥,m包含些啥??

ehcache 或 Spring MVC 的 Spring 缓存中的最佳缓存实践是啥?

是啥导致此 Spring MVC 应用程序中的映射失败?

spring Aop 到底是啥原理啊?