详解Spring MVC的运行流程

版权声明:转载注明出处 https://blog.csdn.net/czr11616/article/details/83987828

Spring MVC的核心在于其运行流程,这是使用Spring MVC框架的基础,下面看一段代码:

//注解@Controller表示他是一个控制器
@Controller("myController")
//表明当请求的URI在/my下的时候才有该控制器响应
@RequestMapping("/my")
public class MyController {
	//表明URI是/index的时候该方法才请求
	@RequestMapping("/index")
	public ModelAndView index() {
		//模型和视图
		ModelAndView mv = new ModelAndView();
		//逻辑视图名称为index
		mv.setViewName("index");
		//返回模型和视图
		return mv;
	}
}

这是一个Controller(控制器),我们以此为例讨论Spring MVC的流程:

先贴一张图,这张图很重要

首先,Spring MVC框架是围绕着DispatcherServlet而工作的(如上图),所以这个类是最重要的类,它是一个Servlet,我们也可以配置它的初始化时间,通常配置在服务器启动的时候初始化

 Spring MVC在初始化的时候会通过@Controller注解把控制器信息加载进来,并通过@RequestMapping注解把请求URI的对应关系信息也加载进来(如代码),最后将加载进来的信息解析生成HandlerMapping。

综上,重点来了,DispatcherServlet是在服务器启动的时候初始化的,HandlerMapping是在Spring MVC初始化的时候生成的,所以这两者都是在请求之前就已经存在了的。

有了以上的概念,我们根据流程图详细讲解一下Spring MVC的执行流程(对应流程图中的步骤!!):

  1.  用户发出请求,交给DispatcherServlet
  2. DispatcherServlet根据请求的URI信息找到指定的HandlerMapping(Spring MVC初始化的时候根据注解信息提前解析好了),然后组织为一个执行链,执行链中包含控制器(及其方法)和对应的拦截器
  3. 前面已经谈到根据请求信息生成了执行链,那么执行链中的方法如何执行呢?当请求到来的时候会根据请求类型找到对应的处理器适配器(RequestMappingHandlerAdpter),通过处理器适配器去执行执行链中的方法。这里需要注意处理器适配器(RequestMappingHandlerAdpter)是在DispatcherServlet初始化的时候生成的。
  4. 执行链中的方法(控制器和拦截器)执行过程中,会在controller的方法中返回指定名称的视图(ModelAndView)(如开头代码段中的index视图)给DispatcherServlet。
  5. DispatcherServlet收到视图后,找到视图解析器开始进行解析
  6. 视图解析器根据其配置的前缀、后缀和视图名称找到指定的页面进行渲染。
  7. 页面接收数据响应请求。

猜你喜欢

转载自blog.csdn.net/czr11616/article/details/83987828