SpringMVC前端控制器和执行流程

SpringMVC

tomcat启动流程

  1. 初始化默认的JspServlet和DefaultServlet
  2. 初始化我们配置的前端控制器DispatcherServlet
  3. 因为我们在DispatcherServlet中配置了mvc.xml,因此也会启动Spring容器。SPring容器会帮我们创建相应的bean并管理
  4. 创建的对象包括Controller层,Service层,Mapper层,Datasource对象,SqlSession对象等

什么是前端控制器

前端控制器本质是一个servlet,是SPringMVC提供的所有请求的的统一入口,因为不同请求可能有共同的操作,这时候就需要前端控制器做统一的处理,比如日志记录,权限检查等,然后再将请求分发给各个处理器去处理

SpringMVC流程分析

  1. DispatcherServlet是核心,负责调度其他组件
  2. 请求进来,前控首先调用处理器映射器(HandleMpper)查找该请求url对应的处理器,返回一个处理器链(包含多个拦截器和最后的那个处理器)
  3. 然后前控通过处理器适配器(HandleAdapter),执行对应处理器中的相应方法,返回ModelAndView对象
  4. 然后前端控制器通过视图解析器(ViewResolver)进行视图解析,就是把逻辑视图(字符串)转换为物理视图view,将view返回前控
  5. 前控通过相应的渲染模板,比如jsp和freemarker将数据渲染到模板,将渲染后的视图返回给浏览器

补充idea断点调试

  1. f5:进入方法内部
  2. f6:一步一步执行
  3. f7: 通过f5进入了某方法,这是不想看了,想跳出该方法使用此键
  4. f8:跳到下一个断点,中间过程直接略过

@ControllerAdvice详解

此注解也是Spring AOP中的一个增强,只不过这个增强的切面是面向于controller层的,那么可以得出一个推论,一次请求的所有流程都会被这种增强覆盖,因为controller层是最外层的。一般结合三种方法型注解:

  1. @ExceptionHandler:用于捕捉controller层中抛出的指定异常
  2. @InitBinder:对controller方法中的参数进行绑定注册,比如日期类型
  3. @ModelAttribute:表示其标注的方法将会在目标Controller方法执行之前执行

你可能感兴趣的:(SpringMVC前端控制器和执行流程)