`

Spring MVC 流程图

 
阅读更多



 

 

 

Spring工作流程描述
      1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
      3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
      7. ViewResolver 结合Model和View,来渲染视图
      8. 将渲染结果返回给客户端。
 
Spring工作流程描述
    为什么Spring只使用一个Servlet(DispatcherServlet)来处理所有请求?
     详细见J2EE设计模式-前端控制模式
    Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?
    符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

 

 

From:http://blog.csdn.net/zuoluoboy/article/details/19766131

 

DispatcherServlet

 

/**
	 * This implementation calls {@link #initStrategies}.
	 */
	@Override
	protected void onRefresh(ApplicationContext context) {
		initStrategies(context);
	}

	/**
	 * Initialize the strategy objects that this servlet uses.
	 * <p>May be overridden in subclasses in order to initialize further strategy objects.
	 */
	protected void initStrategies(ApplicationContext context) {
		initMultipartResolver(context);
		initLocaleResolver(context);
		initThemeResolver(context);
		initHandlerMappings(context);
		initHandlerAdapters(context);
		initHandlerExceptionResolvers(context);
		initRequestToViewNameTranslator(context);
		initViewResolvers(context);
		initFlashMapManager(context);
	}

 

 

 

DispatcherServlet中使用的特殊的Bean

DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:

1、Controller处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;

2、HandlerMapping请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;

3、HandlerAdapterHandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;

4、ViewResolverViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;

5、LocalResover本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;

6、ThemeResovler主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;

7、MultipartResolver文件上传解析,用于支持文件上传;

8HandlerExceptionResolver处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);

9RequestToViewNameTranslator当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;

10FlashMapManager用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述

  • 大小: 91.5 KB
  • 大小: 32.8 KB
分享到:
评论

相关推荐

    Spring MVC 核心流程图

    Spring MVC 核心流程图,清晰介绍了spring mvc中的控制流程

    Spring MVC 教程快速入门 深入分析

    三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...

    spring mvc 的入门级资料

    在 Spring MVC 中,核心流程图如下: 1. 客户端发送 HTTP 请求 2. DispatcherServlet 接收到请求,并将其转发给 HandlerMapping 3. HandlerMapping 将 URL 映射到 Controller 中的方法上 4. HandlerAdapter 将 ...

    Spring MVC入门教程

    三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置文件片段讲解 七、spring mvc 如何访问到静态的文件,如jpg,js,css? 八、spring mvc...

    Spring MVC 教程 快速入门 深入分析

    三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置文件片段讲解 七、spring mvc 如何访问到静态的文件,如jpg,js,css? 八、spring mvc...

    基于Spring + Spring MVC + MyBatis的图书馆管理系统

    Spring MVC + MyBatis的图书馆管理系统,充分展示了Java企业级开发的强大之处,通过合理的技术选型和设计模式,实现了功能完善的图书管理服务,同时也为开发者提供了良好的开发体验和高效的开发流程。

    第二章 Spring MVC 增改查实例

    总结,Spring MVC 提供了一套完整的 Web 开发解决方案,通过注解驱动和依赖注入简化了开发流程。通过实例化的增删改查操作,我们可以深入了解其工作原理,并结合源码分析,进一步掌握 Spring MVC 的精髓。

    综合spring mvc + spring + hibernate + bootstrap开发图书管理系统

    在本项目中,我们利用了Java技术栈中的四个核心组件:Spring MVC、Spring、Hibernate以及Bootstrap,构建了一个全面的图书管理系统。这个系统旨在提供高效、用户友好的图书管理功能,涵盖了从图书入库、检索到借阅、...

    Spring MVC Demo

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了...通过学习和实践这个Demo,你可以更好地理解Spring MVC的运作机制,以及如何利用Gradle来优化项目构建流程。

    一个完整的Spring MVC的CRUD操作实例

    它基于Spring框架,提供了模型-视图-控制器(MVC)架构模式,简化了从前端到后端的数据处理流程。本实例将深入探讨如何实现一个完整的Spring MVC CRUD操作。 首先,我们来了解CRUD操作的基本概念。CRUD是Create...

    spring mvc过程详解

    #### 三、Spring MVC 工作流程 1. **请求接收**:HTTP 请求首先被 DispatcherServlet 接收。 2. **请求映射**:DispatcherServlet 使用 HandlerMapping 找到相应的控制器。 3. **处理请求**:控制器处理请求,并...

    activiti、spring mvc 基础web项目

    总结来说,这个项目是一个典型的Java企业级应用,通过结合Activiti的工作流管理和Spring MVC的Web开发能力,为开发者提供了一个完整的业务流程自动化解决方案。通过深入学习和实践,你可以掌握如何利用这些技术构建...

    Spring MVC运行流程

    Spring MVC 的运行流程涉及多个组件协同工作,确保了请求的正确处理和响应的生成。以下是详细的步骤解释: 1. **启动阶段**:当客户端(通常是浏览器)发起一个HTTP请求时,请求首先被Web应用服务器接收。如果请求...

    前期项目 Spring+Spring MVC+JDBC Template 增删改查

    "动图演示"可能是一些动画教程,展示如何使用这个系统,或者演示Spring MVC和JDBC Template在实际操作中的流程。这些动图有助于直观理解系统的运行机制。 总的来说,本项目提供了学习和实践Spring、Spring MVC和...

    SpringMVC框架架构介绍

    二、Spring MVC核心流程: 1. 用户发起请求到达DispatcherServlet。 2. DispatcherServlet根据HandlerMapping找到合适的处理器(Controller)。 3. 使用HandlerAdapter将请求传递给Controller方法。 4. Controller...

    深入解析Spring+MVC与Web+Flow.pdf

    英文版:Expert Spring MVC and Web Flow 内容简介 《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书中包括的技巧和提示可以让你从这个灵活的框架中汲取尽可能多的信息。书中包含...

    简单纯粹的Spring MVC架构J2EE项目

    在“简单纯粹的Spring MVC架构J2EE项目”中,我们看到的是一个基于 J2EE 平台构建的轻量级 Web 开发解决方案,利用了 Spring MVC 的优势来实现高效的开发流程。 1. **项目结构** - 项目的部署结构通常包括 `WEB-...

    简单的spring mvc项目

    **Spring MVC 简介** Spring MVC 是 Spring 框架的一个模块,它为构建基于 Java 的 Web 应用程序提供了一个模型-视图-控制...理解 Spring MVC 的核心组件、配置以及工作流程对于开发高质量的 Java Web 应用至关重要。

    Spring MVC学习笔记MD.7z

    `img` 文件夹很可能包含了一些示例截图或者流程图,帮助解释一些复杂的概念,比如请求处理流程、视图解析机制等。 学习Spring MVC,你需要理解的核心概念包括: 1. **DispatcherServlet**:作为Spring MVC的前端...

Global site tag (gtag.js) - Google Analytics