1、Spring MVC流程图
2、Spring MVC数据绑定和转换
一、Spring MVC流程概述
以前一直使用Struts做MVC项目,然后再结合Spring做bean管理、AOP、以及事务的配置,但自从Spring MVC推出以后,它大大的简化了MVC的配置,对于web MVC的项目开发有了质的飞跃。下面简要的看下Spring MVC的主要流程。
1、当用户通过浏览器发送web请求时,首先接受到的是应用服务器,比如tomcat,应用服务器通过协议解析等一系列动作后,将请求对象HttpServletRequest交给DispatcherServlet,DispatcherServlet是Spring MVC的核心入口。
2、DispatcherServlet收到request请求后会在doService方法里设置一些request相关的属性,比如applicationContext,支持国际化用的LocalResolver等,然后将request交由请求处理适配器
3、Spring 在初始化applicationContext的阶段会将请求uri与请求处理器进行一个映射,在运行期由请求处理适配器HandlerAdapter通过request对象找到对应的处理器 HandlerMethod,Spring MVC中的Handler是Object类型,实际上是在Controller上配了@ReqquestMapping的方法,因此默认提供的都是HandlerMethod对象作为请求处理器。
4、Handler处理请求,即调用对应的业务方法逻辑后将返回ModelAndView视图对象,然后调用 HandlerExecutionChain的 applyPostHandle方法处理视图对象
5、Spring MVC使用视图解析器解析ModelAndView对象,然后生成对应的页面交由DispatcherServlet,由它将响应写回给客户端,这样就基本完成了整个请求的处理 。
下面来看看DispatcherServlet的类图结构
DispatcherServlet继承了FrameworkServlet,FrameworkServlet实现了servlet接口,同时实现了Spring的ApplicationContextAware拥有了设置上下文的能力。
DispatcherServlet聚合了HandlerExcutionChain和HandlerAdapter,其中HandlerExcutionChain聚合了HandlerInterceptor,HandlerExcutionChain的主要作用就是在执行具体的业务方法的前后执行注入的拦截器。
HandlerAdapter是一个处理器的适配器或者说是一个选择器。读者可能会问,在HandlerExcutionChain里不是有handler吗,为什么不直接使用HandlerExcutionChain执行handler而非要再套个Adapter? 其实是因为Spring MVC支持多种的处理方式,比如直接写一个类,在方法里添加注解@RequestMapping就可以生成一个处理器,同时还支持原生的Servlet等方式,所以在处理一个请求时虽然知道了执行业务处理的方法,但是具体执行时应该设置怎样的上下文,执行前需要做这样的准备是不一样的。所以有了Adapter这一层。通过HandlerAdapter.support(Object handler)来判断是否可以执行本次请求处理器。
当DispatcherServlet确定使用哪个HandlerAdapter之后,就是调用handle()方法去执行业务逻辑,然后返回ModelAndView对象供视图层使用。
得到ModelAndView后通过processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);方法处理视图对象,这里会通过视图解析器 ViewResolver把ModelAndView解析成View对象,然后调用View的render方法找到生成要返回的response对象并返回给用户。
二、Spring MVC数据绑定及转换
Spring MVC对于的请求数据的绑定处理是在执行Handler方法时进行的。下面看看数据绑定相关的类图结构
图中标深黄色的是主要的类,接下来具体的分析一下这些类
1、RequestMappingHandlerAdapter:它在Spring MVC中是具体执行handler的,它在invokeHanlderMethod方法中通过反射执行Handler,在具体执行之前它先把请求传过来的数据做转换和绑定。通过类图可以知道它是通过WebDataBinderFactory来进行数据绑定的。
2、DataBinder是Spring MVC数据绑定的核心部件,它通过装配上下文中的ConversionService组件进行数据类型转换、数据格式化工作。可以看到它的实现类GenericConversionService里聚合了Converters,其中Converters就装配了一个gloBalConverters Set集合和一个Map集合,真正运行的时候这里会有一堆的转换类,其中ObjectToStringConverter就是其中的一个,其实JDK本身也提供了一个类似的转换工具就是 PropertyEditor,但是它的核心功能是将一个字符串转为对象,并不适用于两个对象之间的转换,同时对于源对象的上下文信息(注解、宿主类结构等)不敏感,无法在转换的时候通过这些信息实现一些逻辑,因此Spring新建了一套转换体系。
下图是DataBinder的工作机制示意图
相关推荐
"chapter23-MVC-Demo"这个文件可能包含了与上述知识点相关的示例代码,包括一个完整的MVC Demo项目,可以运行并观察其工作原理。 通过学习这部分源码,读者不仅能掌握Spring MVC的基础用法,还能深入理解其内部工作...
Spring Boot还可以与Spring Cloud结合,构建微服务架构,实现服务发现、配置中心、熔断器等功能。 事务管理是企业级应用中不可或缺的部分,Spring提供了声明式事务管理,让开发者能够在不侵入业务逻辑的情况下实现...
《Spring揭秘》这本书深入浅出地探讨了Spring框架的核心特性,包括IoC(Inversion of Control,控制反转)容器、AOP(Aspect Oriented Programming,面向切面编程)以及MVC(Model-View-Controller,模型-视图-控制...
4. **Spring MVC**:作为Spring的一部分,Spring MVC是一个强大的Web应用框架,用于构建RESTful风格的Web服务。它包含模型、视图和控制器组件,提供了请求处理、视图渲染以及数据绑定等功能。 5. **Spring Boot**:...
Spring MVC是Spring提供的Web框架,用于构建RESTful风格的Web应用,它将模型、视图和控制器分离,增强了代码的组织性和可测试性。 Spring Boot是Spring的另一个重要组成部分,它简化了Spring应用的初始设置和运行...
《Spring揭秘》是一本深入解析Spring框架的权威指南,它涵盖了Spring的核心概念和技术,旨在帮助开发者全面理解并熟练掌握Spring的使用。Spring是Java企业级应用开发中的一个关键框架,以其模块化、轻量级和强大的...
SpringMVC是Spring框架的一部分,专门用于构建Web应用程序,它提供了一种模型-视图-控制器(Model-View-Controller,MVC)架构模式,使得开发者可以清晰地分离业务逻辑、数据处理和用户界面。 JavaFX是Oracle公司...
Spring框架是Java开发中最广泛应用的轻量级框架之一,它以其强大的功能和灵活...而"Spring揭秘部分2"和"Spring揭秘部分3"则可能进一步探讨Spring的其他模块和高级特性,如Spring Boot、Spring MVC和Spring Security等。
这部分介绍了Spring框架的基本概念和架构,包括依赖注入(Dependency Injection,DI)的重要性,以及如何使用Spring容器来管理对象的生命周期。同时,会讲解Spring的Bean工厂和ApplicationContext的区别与应用场景。...
5. **Spring MVC**:Spring的Model-View-Controller(MVC)框架是用于构建Web应用的组件,它将业务逻辑、数据处理和用户界面分离,提高了代码的可重用性和可维护性。 6. **数据访问集成(JDBC、ORM)**:Spring提供...
4. **MVC**:Spring MVC是用于构建Web应用程序的模块,提供模型-视图-控制器架构模式的实现。 5. **Java EE支持**:包括对EJB的轻量化使用,对JMS、JTA等Java EE标准的支持。 6. **WebSocket**:提供了WebSocket...
5. **MVC框架**:Spring MVC是Spring提供的Web应用开发框架,它包括控制器、模型、视图和处理器映射等组件,实现了清晰的职责划分。 6. **Spring Boot**:近年来,Spring Boot成为快速构建Spring应用的首选方式,它...
7. **Spring Cloud**:在微服务架构中,Spring Cloud为开发者提供了配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等功能。 8. **Spring Security*...
- **Web开发支持**:Spring MVC是Spring框架中用于Web应用开发的模块,提供了对MVC设计模式的支持,帮助开发者构建清晰、可维护的Web应用程序。此外,Spring Boot的引入进一步简化了Web应用的开发和部署,通过约定...
《Spring揭秘》是一本深入探讨Java开发中Spring框架核心概念和技术的书籍,旨在帮助程序员全面了解和掌握这一广泛使用的开源框架。Spring以其依赖注入、面向切面编程、事务管理等功能,成为了Java企业级应用开发的...
- **进阶技巧**:如何利用Spring MVC实现复杂的业务逻辑。 以上就是根据给定文件中提到的技术知识点进行的详细总结。这些知识点涵盖了Redis、Nginx、分布式技术、MySQL、Dubbo、Zookeeper以及Spring等多个方面,...