SpringMVC请求流程

SpringMVC请求流程

  • 请求执行过程(时序图)
  • SpringMVC执行原理
  • 名词解析
  • 相关知识
    • 中心控制器
    • 处理器的配置

请求执行过程(时序图)

SpringMVC请求流程_第1张图片

  • 项目启动,Tomcat启动,加载应用的web.xml文件;
  • 实例化并初始化Servlet();
  • 加载springMVC.xml配置文件创建spring容器,根据配置初始化容器中的对象;
  • 加载完毕之后,浏览器发送请求,比如"/hello";
  • 请求到达前端控制器;
  • 截取请求的动作名称“hello",并从@RequestMapping中找;
  • 找到之后,执行控制器中的方法;
  • 方法有返回值,根据返回值通过InternalResourceViewResolver找到响应结果;
  • 响应浏览器,展示结果;

SpringMVC执行原理

SpringMVC请求流程_第2张图片
执行过程如下:
(1) 用户发送request请求,该请求被前端控制器(DispatcherServlet)处理;
(2) 前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找Handler;
(3) 处理器映射器(HandlerMapping)根据配置查找相关的Handler,返回给前端控制器(DispatcherServlet);
(4) 前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)执行相应的Handler(或称为Controller);
(5) 处理器适配器(HandlerAdapter)执行Handler;
(6) Handler执行完毕之后会返回ModelAndView对象给处理器适配器(HandlerAdapter);
(7) 处理器适配器(HandlerAdapter)对象接收到Handler返回的ModelAndView对象后,将其返回给前端控制器(DispatcherServlet);
(8) 前端控制器(DispatcherServlet)接收到ModelAndView对象后,请求视图解析器(ViewResolver)对视图进行解析;
(9) 视图解析器(ViewResolver)根据View信息匹配相应的视图结果后,返回给前端控制器(DispatcherServlet);
(10)前端控制器(DispatcherServlet)收到View视图后,对视图进行渲染,将Model中的模型数据填充到View视图中的request域,生成最终的视图;
(11) 前端控制器(DispatcherServlet)返回请求结果给用户。

名词解析

1、DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心。相当于MVC中的C,由它来调用其他组件处理用户的请求,DispacherServlet的存在降低了组件之间的耦合性;当用户发送请求时,DispatcherServlet接受请求并拦截请求。
假设请求的url为:http://localhost:8080/springmvc/hello
其中hello表示控制器,即请求服务器localhost:8080上springmvc站点的hello请求;

2、HandlerMapping处理器映射器,DispacherServlet调用HandlerMapping,HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式、实现接口方式、注解方式等;

3、HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上面url被查找的控制器就是hello;
HandlerExecution将解析后的信息传递给DispacherServlet,如解析控制器映射等;

4、Handler处理器,即自定义的Controller处理单元。它就是我们开发中要编写的具体业务控制器,由DispatcherServlet把用户请求转发到Handler,由Handler对用户的请求进行处理;

5、HandlerAdapter表示处理器适配器,通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,会按照特定的规则取执行Handler;
Handler让具体的Controller执行,Controller会将具体的执行信息返回给HandlerAdapter,例如ModelAndView;
然后HandlerAdapter将试图逻辑名或者模型传递给DispatcherServlet;

6、ViewResolver视图解析器,DispatcherServlet调用ViewResolver(视图解析器)来解析HandlerAdapter传递的逻辑视图名,View Resolver负责将处理结果生成View试图,View Resolver首先根据逻辑视图名接续成物理视图名,即具体的页面地址,再生成View视图对象,最后对View进行渲染,将处理结果通过页面展示给用户。

相关知识

中心控制器

Spring的Web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求发送到不同的处理器,从Spring2.5开始,使用Java 5 或者以上版本的用户可以基于注解的controller声明方式。SpringMVC框架像许多其他MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispacterServlet是一个实际的Servlet(它继承自HttpServlet基类)

处理器的配置

在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器被称为SpringMVC的三大组件。

  • RequestMappingHandlerMapping 处理器映射器
    处理@RequestMapping注解,并且将其注册到请求映射表中。
  • RequestMappingHandlerAdapter 处理器适配器
    处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。
    使用自动加载RequestMappingHandlerMapping(处理器映射器)和RequestMappingHandlerAdapter(处理器适配器),可以在springmvc.xml配置文件中使用来代替注解映射器和适配器的配置。
    
    
    
    
    
    
    <mvc:annotation-driven/>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"  >property>
        <property name="suffix" value=".jsp"  >property>
    bean>

持续更新,如果错误,欢迎大家指出,共同学习…

你可能感兴趣的:(#,Java面试题,#,SpringMVC,mvc,spring,java,springmvc)