Spring mvc核心流程

QQ图片20200302123547.png
20180522162744760.png

1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、 DispatcherServlet——>HandlerMapping,HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多个 HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、 DispatcherServlet——>HandlerAdapter.Controller(HandlerAdapter 将会把Controller包装为适配器,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理);

4、 业务处理方法(Service)

5、 HandlerAdapter.Controller返回一个 ModelAndView 对象(包含模型数据、逻辑视图名);

6、 ModelAndView 的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的 View,通过这种策略模式,很容易更换其他视图技术;

7、 View——>渲染,View 会根据传进来的 Model 模型数据进行渲染,此处的 Model 实际是一个 Map 数据结构,因此很容易支持其他视图技术;

8、 返回控制权给 DispatcherServlet,由 DispatcherServlet 返回响应给用户,到此一个流程结束。


开发步骤:

1、 DispatcherServlet 在 web.xml 中的部署描述,从而拦截请求到 Spring Web MVC

2、 HandlerMapping 的配置,从而将请求映射到处理器

4种HandlerMapping的配置方式:

2.1 基于注解:
  
  
  

2.2 显示的指定url对应关系:

prop的key值->请求,后面指定处理这个请求的Controller



        
            
                /HelloWorld
            
        

2.3 基于BeanName找到Controller:


2.4 基于Controller的Class Name找到Controller:


3、 HandlerAdapter 的配置,从而支持多种类型的处理器

1.DispatcherServlte会根据配置文件信息注册HandlerAdapter,如果在配置文件中没有配置,那么DispatcherServlte会获取HandlerAdapter的默认配置,如果是读取默认配置的话,DispatcherServlte会读取DispatcherServlte.properties文件,该文件中配置了三种HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter(3.1以后已经过时,使用RequestMappingHandlerAdapter)。DispatcherServlte会将这三个HandlerAdapter对象存储到它的handlerAdapters这个集合属性中,这样就完成了HandlerAdapter的注册。

2.DispatcherServlte会根据handlerMapping传过来的controller与已经注册好了的HandlerAdapter一一匹配,看哪一种HandlerAdapter是支持该controller类型的,如果找到了其中一种HandlerAdapter是支持传过来的controller类型,那么该HandlerAdapter会调用自己的handle方法,handle方法运用java的反射机制执行controller的具体方法来获得ModelAndView,例如SimpleControllerHandlerAdapter是支持实现了controller接口的控制器,如果自己写的控制器实现了controller接口,那么SimpleControllerHandlerAdapter就会去执行自己写控制器中的具体方法来完成请求。

4、 ViewResolver 的配置,从而将逻辑视图名解析为具体视图技术

4.1 InternalResourceViewResolver:

配置表示,将在Controller返回的ModelAndView的基础上,加上目录前缀/WEB-INF/jsp/,
加后文件名称后缀.jsp,由此等待下个页面如/WEB-INF/jsp/showCats.jsp


   org.springframework.web.servlet.view.JstlView
   /WEB-INF/jsp/ 
   .jsp 
 
4.2 ResourceBundleViewResolver:

在properties文件中维护class与视图资源的配置关系

5、 处理器(页面控制器)的配置,从而进行功能处理

你可能感兴趣的:(Spring mvc核心流程)