SpringMVC 运行原理

 
 
一.SpringMVC 简介
1.SpringMVC中重要组件
      1.1 DispatcherServlet:前端控制器,接收所有请求(如果配置/不包含isp)
      1.2 HandlerMapping:解析请求格式的.判断希望要执行哪个具体
      的方法,
      1.3 HandlerAdapter:负责调用具体的方法.
      1.4 ViewResover:视图解析器解析结果,准备跳转到具体的物理视图
 
二、SpringMVC运行原理图

三、spring容器和springMVC容器的关系

1. spring容器和springMVC容器是父子容器,springMVC容器可以调用spring容器的所有内容。

2. 图示

 四、访问流程(自己瞎总结的)

在浏览器输入localhost:8080/springmvc02/demo,demo会被dispatcherServerlet拦截,然后由dispatcherServerlet调defaultAnnotationHandlerMapping去解析请求,发现需要找demo,annotationMethodHandlerAdapter就会去控制器中的requestMapping中找有没有demo,有的话就执行demo所在的方法。如果返回值是jsp页面文件,就由内置的视图解析器帮我们解析。

 

 五、各组件介绍

5.1 DispatcherServlet
  DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。
      MVC模式:传统定义,一个WEB应用中,只有唯一的一个控制器和客户端交互。所有的客户端请求和服务器单点接触。这个控制器称为核心控制器(前端控制器)。传统定义中,核心控制器的实现使用Servlet实现。如: SpringMVC, Struts1。
      MVC优势:单点接触,可以有效的解耦。可以实现功能的重用。
  M- model
  V-view
  C-controller
5.2 HanderMapping
  处理映射器。
  HandlerMapping负责根据用户请求找到Handler 即处理器(如:用户自定义的Controller), springmvc 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  映射器相当于配置信息或注解描述。映射器内部封装了一个类似map的数据结构。使用URL作为key,HandlerExecutionChain 作为value。核心控制器,可以通过请求对象(请求对象中包含请求的URL)在handlerMapping中查询HandlerExecutionChain对象。
  是SpringMVC核心组件之一。是必不可少的组件。无论是否配置,SpringMVC 会有默认提供。
  如果有<mvc:annotation-driven/> 标签配置,默认的映射器:RequestMappingHandlerMapping。
       如果没有<mwcannotation-driven/>标签配置,且使用注解开发SpringMVC代码,默认的映射器是: RequestMappingHandlerMapping. (老版本中有其他的映射器,但是已经过时)。
5.3 HandlerAdapter
  通过HandlerAdapter 对处理器(Handler) 进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。|
       典型的适配器: SimpleCotrollerHandlerAdapter。最基础的。处理自定义控制器(Handler)和SpringMVC控制器顶级接口Controller之间关联的。
       如果定义了<mvc:annotation-driven/>标签配置,使用适配器对象为:HttpRequestHandlerAdapter.。
       适配器也是SpringMVC中的核心组件之一。必须存在。SpringMVC 框架有默认值。

 5.4 Handler

  处理器。
       Handler是继DispatcherServlet 前端控制器的后端控制器(自定义控制器),在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler 。
       在SpringMVC中对Handler没有强制的类型要求。在SpringMVC框架中,对Handler的引用定义类型为Object。
       处理器理论上说不是必要的核心组件。
       SpringMVC框架是一“个线程不安全的,轻量级的框架。一个handler对象,处理所有的请求。开发过程中,注意线程安全问题。
 
5.5 ViewResolver.
  ViewResolver负责将处理结果生成View视图, ViewResolver首先根据逻辑枧图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
  是SpringMVC 中必要的组件之一。SpringMVC 提供默认视图解析器。
  InternalResourceViewResolver。内部资源视图解析器。
  枧图解析器是用于处理动态枧图逻辑的。静态枧图逻辑,不通过SpringMVC流程。直接通过WEB中间件(Tomcat) 就可以访问静态资源。
原文地址:https://www.cnblogs.com/girl1314/p/10968367.html