面试题:SpringMVC的工作流程

SpringMVC是当今最主流的Web MVC框架,没有之一,要做一名合格的JavaWeb工程师,学好它势在必行!

与Struts2原理不同,SpringMVC是通过最基础最传统的servlet来实现对框架源代码的封装以及对整个流程的控制的,而Struts2是通过过滤器来实现URL路径与具体Action的对应关系确认的。(Struts2具体机制参看另一篇博客链接

下图是springMVC的原理示意图:

SpringMVC工作流程概述:

1、客户端向web服务器(如tomcat)发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径(通过web.xml中的servlet-mapping配置),web容器就将请求交给DispatcherServlet处理。

2、DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符(URI)。然后调用相应方法得到的HandlerMapping对象,再根据URI,调用这个对象的相应方法获得Handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)

3、DispatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。

4、在拦截器方法中,提取请求中的数据模型,填充Handler入参,所以所有准备工作都已做好,开始执行Handler(我们写的controller代码并不是能被直接执行,需要有刚才那些操作,才能转变为Handler被执行)。

5、Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet。

6、这个ModleAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图(通俗理解为将视图名称补全,如加上路径前缀,加上.jsp后缀,能指向实际的视图)。

7、DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图。将得到的最终视图通过http响应返回客户端。

概念解析:

1、HandlerMapping 
Spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。 
  
以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用 
  DefaultAnnotationHandlerMapping将扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联。

2、Handleradapter 
Spring MVC通过HandlerAdapter来实际调用处理函数。 
以AnnotationMethodHandlerAdapter为例 
DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。

其他问题:

Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?
    符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

时序图(转载):

原文地址:https://www.cnblogs.com/shan1393/p/8995636.html

时间: 2024-10-09 22:29:09

面试题:SpringMVC的工作流程的相关文章

1、SpringMVC的工作流程

1.简单的谈一下SpringMVC的工作流程? 流程 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3.处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet. 4.DispatcherServlet调用HandlerAdapter处理器适配器 5.HandlerAdapter经过适配调用具体的处理器(Controller

09 springmvc的工作流程

问题 叙述一下springmvc的工作流程 答案 首先介绍几个概念: 前端控制器:即DispatcherServlet,用以接收前端请求,转发到对应的api 处理器映射器:顾名思义,映射找寻对应API 处理器适配器:调用映射找寻到的API 处理器:即后端控制器,程序员提供的API实现 视图解析器:顾名思义,寻址渲染显示视图之用 一个前端请求发送到后台再响应到前端一般会经过以下步骤: 1 用户发送请求经过类型转化.格式化和校验送至前端控制器DispatcherServlet 2 Dispatche

SpringMVC的工作流程以及组件说明

1. SpringMVC处理流程 2. SpringMVC架构 2.1 框架结构 2.2 框架流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet. 4. DispatcherServlet调用HandlerAdapter处理器适配器. 5. Handler

SpringMVC的工作流程 (网路精解拼接)

从网上找了一张很详细的图进行解释 组件:1.前端控制器DispatcherServlet(不需要工程师开发),由框架提供作用:接收请求,响应结果,相当于转发器,中央处理器.有了dispatcherServlet减少了其它组件之间的耦合度.用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性. 2.处理器映射器HandlerMapping(不需要工程

springMVC 基本工作流程、基本配置

(1) Http请求:客户端请求提交到DispatcherServlet. (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller. (3) 调用处理器:DispatcherServlet将请求提交到Controller. (4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView. (6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或

SpringMVC的工作流程

DispatcherServlet:核心控制器 HandlerMapping:处理器映射器 HandlerAdapter:处理器适配器 Handler:处理器 ViewResolver:视图解析器 1,  用户请求,发送到核心控制器(DispatcherServlet) 2,  核心控制器(DispatcherServlet)到处理器映射器中查找处理该请求对应的处理器(Handler),并返回到核心控制器(DispatcherServlet) 3,  核心控制器(DispatcherServle

SpringMVC框架之工作流程

1.SpringMVC的基本工作流程 2.SpringMVC具体工作流程 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3.处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet. 4.DispatcherServlet调用HandlerAdapter处理器适配器 5.HandlerAdapter经过适配调用具体的处理器(

了解SpringMVC框架及基本工作流程

传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此,我们都知道我们request和response都依赖于url,当我们想要通过针对围绕url进行编程的话单纯的JSP+Servlet在实现上只有过滤器Filter在抵达相对应的Servlet之前起作用,但是如果我们想要在Servlet转发或者重定向之后再进行一些工作呢?一个url对应一个Servlet

SpringMVC框架及基本工作流程详解

传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此,我们都知道我们request和response都依赖于url,当我们想要通过针对围绕url进行编程的话单纯的JSP+Servlet在实现上只有过滤器Filter在抵达相对应的Servlet之前起作用,但是如果我们想要在Servlet转发或者重定向之后再进行一些工作呢?一个url对应一个Servlet