SpringMVC笔记(一)——请求流程

简介


SpringMVC是一个开源的JavaWeb框架。Spring框架最初由Rod Johnson编写,据说只是为了证明一下,MVC并不是一件十分困难的事情。
SpringMVC提供了MVC架构以及用于开发灵活以及松散耦合的Web应用程序的组件,所谓MVC也就是将模型层、视图层以及控制层进行分离。

前端控制器DispatcherServlet


DispatcherServlet是SpringMVC的核心,这让我想起了Struts2中的StrutsPreparedAndExcuteFilter,同样是整个MVC框架的前端控制器。它负责处理所有Http请求和响应。其处理流程大致如下:

  1. 请求发送给DispatcherServlet,但前端控制器并不进行处理,而是委托给其他解析器,DispatcherServlet仅仅作为统一访问点,进行全局控制;
  2. DispatcherServlet解析请求URL,查询HandlerMapping,HandlerMapping将请求映射为一个HandlerExcutionChain(包含一个Handler(页面控制器)对象和多个HandlerInterceptor对象)返回,通过这种策略,很容易添加新的映射策略;
  3. DispatcherServlet根据获得的Handler选择一个合适的HandlerAdapter(如果成功获得了HandlerAdapter,则会开始执行拦截器的preHandler(…)方法);
  4. 提取request中的模型参数,填充Handler入参,执行Handler(也就是Controller),在填充参数的过程中,Spring将会根据你的配置,为你做一些额外的工作:
    • HttpMessageConveter:将请求消息(json或者xml数据)转化为一个对象,以及将对象转化为对应的相应信息;
    • 数据转化 :对请求消息进行数据转化,例如将String转化为Integer或者Double等;
    • 数据格式化:将请求消息格式化,例如将String转化为格式化数字或者格式化日期等;
    • 数据验证:例如验证数据的长度格式等等,并将验证结果存储到BindingResult或者Error中;
  5. Handler执行结束后,向DispatcherServlet返回一个ModelAndView对象(其中包含有模型数据和视图逻辑名);
  6. 根据ModelAndView,选择一个合适的ViewResolver(该ViewResolver必须已经在Spring容器中注册过)返回给DispatcherServlet;
  7. ViewResolver根据视图和模型来渲染
  8. 向用户返回渲染好的视图。
    流程图如下
    SpringMVC笔记(一)——请求流程