SpringMVC——SpringMVC组件及工作原理

文章目录

  • SpringMVC组件
    • 1. 前端控制器(DispatcherServlet)
    • 2. 处理映射器(HandlerMapping)
      • 2.1 RequestMappingUrlHandlerMapping
      • 2.2 BeanNameUrlHandlerMapping
      • 2.3 SimpleUrlHandlerMapping
    • 3. 处理适配器(HandlAdapter)
    • 4. 处理器(Handl)
    • 5. 视图解析器(View Resolver)
  • Spring运行流程图
  • 代码解析

SpringMVC组件

1. 前端控制器(DispatcherServlet)

先看一下DispatcherServlet的配置。
SpringMVC——SpringMVC组件及工作原理_第1张图片

DispatcherServlet 实现了HttpServlet接口,所以一定程度上它就是一个Servlet。所有的请求会先到达doService()方法上,前端控制器收到所有的请求,然后进行调用其他组件进行处理工作。

2. 处理映射器(HandlerMapping)

HandlerMapping 处理映射器负载根据用户请求找到Handler即处理器。SpringMVC提供了多种映射处理器。目前常见的是三种,并不代表后续不会扩展。

2.1 RequestMappingUrlHandlerMapping

此处理映射器默认启动,该处理映射器用于匹配我们常用的controller类。
原理是,发起请求后,RequestMappingUrlHandlerMapping 匹配到RequestMapping 注解中实例的URL路径,从自身维护的Map根据Url取对应的方法,包装成HanderMethod对象,然后交给RequestMappinigHandlerAdapter,用于处理controller中实际方法。

@RestController
public class CityController implements ApplicationContextAware, BeanFactoryAware {
    @RequestMapping("/city")
    @ResponseBody
    public String getAllCities(){
        return "HelloWorld";
     }
}

2.2 BeanNameUrlHandlerMapping

该类型用于匹配继承了AbstractController的类。
发起请求后,BeanNameUrlMapping 匹配到url,从父类AbstractUrlHandlerMapping维护的map中根据url取出实际的类。
如下面BeanNameController,然后交给SimpleControllerHandlerAdapter,调用handleRequestInternal方法。

@Component("/order")
public class BeanNameController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 返回值是ModelAndView,此处直接通过流输出。所以返回null,不影响
        PrintWriter writer = response.getWriter();
        writer.write("BeanNameController");
        writer.flush();
        writer.close();
        return null;
    }
}

2.3 SimpleUrlHandlerMapping

该类型用法最灵活,既可以用于匹配静态资源,又可以简化controller等等。可以网上找一下demo。

3. 处理适配器(HandlAdapter)

真的Handl在处理适配器这里调用,处理适配器的实现类也有很多,并且处理映射器是对应的。所以大概率就为了给映射处理器做适配调用。

4. 处理器(Handl)

处理器,就是我们编写的controller类。这个理解起来没啥问题,我们编写的controller层代码都会被加载到map中。通过处理映射器找到对应的对象,然后在通过处理适配器进行调用。

5. 视图解析器(View Resolver)

视图解析器主要是负责将我们的处理器返回的数据解析成View对象。然后根据不同的View调用不同的View处理器,通过输出流返回给前端。

Spring运行流程图

SpringMVC——SpringMVC组件及工作原理_第2张图片

代码解析

SpringMVC——SpringMVC组件及工作原理_第3张图片
SpringMVC——SpringMVC组件及工作原理_第4张图片
SpringMVC——SpringMVC组件及工作原理_第5张图片
跟着视图解析器的逻辑往下走,
SpringMVC——SpringMVC组件及工作原理_第6张图片

你可能感兴趣的:(SpringMVC)