SpringMVC学习笔记(一)——原理以及源码分析

1.SpringMVC框架

1.1定义

springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
springmvc是一个基于mvc的web框架。

1.2 工作原理

springmvc原理图02.png
  1. 浏览器发出request,DispatcherServlet接收request并向HandlerMapping请求获取andler
  2. HandlerMapping返回执行后的Handler
  3. DispatcherServlet调用HandlerAdapter处理Handler,执行完毕后返回ModelAndView
  4. DispatcherServlet接收到后请求ViewResolver对ModelAndView进行解析,解析完毕后返回视图
  5. DispatcherServlet对视图进行渲染呈现在客户端并向浏览器返回response

1.3 组件说明

(1) DispatcherServlet(核心组件)

SpringMVC的核心,类比cpu,在接受Http请求后负责各个组件的协调,主要工作有以下三点:

  • 截获符合特定格式的URL请求。
  • 初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、
    持久化层的WebApplicationContext建立关联。
  • 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

(2)HandlerMapping:

能够完成客户请求到Controller映射。

(3)Controller:

需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。
Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,

(4)ViewResolver:

Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。

(5)Handle(需要程序员开发)

编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

ModelAndView中包含了模型(Model)和视图(View)。
从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

2.源码分析

2.1工作机制

在容器初始化时会建立所有url和controller的对应关系,保存到Map中.tomcat启动时会通知spring初始化容器(加载bean的定义信息和初始化所有单例bean),然后springmvc会遍历容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和controller保存到一个Map中;

这样就可以根据request快速定位到controller,因为最终处理request的是controller中的方法,Map中只保留了url和controller中的对应关系,所以要根据request的url进一步确认controller中的method,这一步工作的原理就是拼接controller的url(controller上@RequestMapping的值)和方法的url(method上@RequestMapping的值),与request的url进行匹配,找到匹配的那个方法;

确定处理请求的method后,接下来的任务就是参数绑定,把request中参数绑定到方法的形式参数上,这一步是整个请求处理过程中最复杂的一个步骤。springmvc提供了两种request参数与方法形参的绑定方法:

① 通过注解进行绑定,@RequestParam

② 通过参数名称进行绑定.
  使用注解进行绑定,我们只要在方法参数前面声明@RequestParam("a"),就可以将request中参数a的值绑定到方法的该参数上.使用参数名称进行绑定的前提是必须要获取方法中参数的名称,Java反射只提供了获取方法的参数的类型,并没有提供获取参数名称的方法.springmvc解决这个问题的方法是用asm框架读取字节码文件,来获取方法的参数名称.asm框架是一个字节码操作框架,关于asm更多介绍可以参考它的官网.个人建议,使用注解来完成参数绑定,这样就可以省去asm框架的读取字节码的操作.

2.2 阅读源码

水平不够,以后再补充

你可能感兴趣的:(SpringMVC学习笔记(一)——原理以及源码分析)