请求的分发
请求首先到达DispatcherServlet,应用服务器会根据Web应用中web.xml文件定义的url映射将相应的请求分发到DispatcherServlet中
请求的处理
DispatcherServlet会查找相应的HandlerMapping接口的实现类,调用其中的方法:HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception,该方法会返回一个HandlerExecutionChain。返回的HandlerExecutionChain中包含了零个或者是多个Interceptor和一个处理请求的Handler。DispatcherServlet会调用Interceptor中的preHandle() 方法。然后处理Handler,这个Handler相当于Struts中Action,在SpringMVC中默认的实现是Controller接口,是具体处理请求的代码所驻留的地方。事实上HandlerExecutionChain中的getHandler()返回的是一个Object类型。DispatcherServlet不会直接调用getHandler()返回对象中的方法,DispatcherServlet会查找相应的HandlerAdapter,然后具体通过HandlerAdapter来调用getHandler()返回的handler对象中的方法。就是说我们可以实现自己的HandlerAdapter然后通过IoC注入到DispatcherServlet中,从而可以实现一套自定义的控制器。随后DispatcherServlet会调用Interceptor中的postHandle()方法。
视图的处理
DispatcherServlet会期望Hander返回一个ModelAndView,DispatcherServlet会根据所返回的ModelAndView对象所包含的信息进行视图的渲染。起具体出来流程如下:
首先DispatcherServlet会根据LocaleResolver来识别请求中的Locale,开发人员可以自己实现LocaleResolver接口,然后通过IoC注入到DispatcherServlet中,然后DispatcherServlet会判断ModelAndView中是否已经包含了接口View的具体实现,如果包含了,则直接调用View中的方法render(Map model, HttpServletRequest request, HttpServletResponse response)。如果不包含,则说明该ModelAndView只是包含了View的名称引用,DispatcherServlet会调用ViewResolver中的resolveViewName(String viewName, Locale locale)来解析其真正的视图。该方法会返回一个View的具体实现。
视图的渲染
Spring支持多种视图技术,其中比较常用的包括有Jstl视图,Veloctiy视图,FreeMarker视图等。对Jstl视图的渲染Spring是通过JstlView这个类具体实现的。事实上其最终的渲染是交给容器来做的,Spring只是通过RequestDispatcher实现了服务器内部请求的Forward。而对于模板视图,如Veloctiy和FreeMarker等,Spring会初始化其相应的模板引擎,由模板引擎生成最终的Html页面然后在合并到Response的输出流中。
异常的处理
如果在Hander中处理请求是抛出异常,DispatcherServlet会查找HandlerExceptionResolver接口的具体实现,该接口定义了一个方法:
ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex),实现类需要实现该方法以便对异常进行处理,最后该方法需要返回一个ModelAndView。
SpringMVC的一些总结
灵活的Interceptor,通过Interceptor我们可以在一个请求处理前和请求处理完成之后做相应的操作,通过Interceptor机制,我们可以做authentication, logging, and filtering等。
良好的表单支持,在SpringMVC的Controller继承体系结构中,其具体的子类对表单(Form)提供了良好的支持。能够很好的支持单个表单的显示、修改、提交操作。同时也提供了表单的分步提交。
可定制的数据绑定(Data Binding)。
多视图技术的支持,SpringMVC同时支持Jstl, Velocity 等多中视图技术,但是这同时也会引出一个问题,因为各种视图技术都有自己的一套方法来处理国际化,例如Jstl和Velocity处理国际化的方式就很不相同。因此在多个视图技术并存的应用中,国际化也是一个需要注意的问题。
其Handler(控制器)作为Bean定义在Spring容器中,因此能享受容器带来的服务。
Handler(控制器)具有良好的可测试性。
分享到:
相关推荐
### Spring工作流程详解 #### 一、Spring MVC工作流程 Spring MVC是Spring框架的一个重要组成部分,主要用于构建基于Java的应用程序的Web层。Spring MVC采用了MVC(Model-View-Controller)设计模式,使得应用程序...
Spring 工作流程详解 Spring 是一个基于 POJO 的轻量级 J2EE 应用框架,它支持一种比较新的编程方法:控制反转(Inversion of Control)。在 J2EE 应用程序中,Spring 可以用来创建工作流引擎,以便更好地组织后端...
整理了一下spring的加载, 个人对于Spring的流程的理解,望多多指正
例如,Activiti是一个基于BPMN 2.0标准的开源工作流引擎,它可以与Spring无缝集成,实现流程定义、启动、查询和控制等功能。 在创建一个简单的工作流引擎时,我们首先需要定义流程模型。这通常通过XML文件或图形化...
Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。...通过理解和使用Spring事务流程图,我们可以更好地设计和优化我们的应用程序,确保在多线程环境下的数据一致性。
而Flowable是一款开源的工作流和业务流程管理系统,其特点是灵活、可扩展且易于使用,特别适合与Java应用程序集成。 集成Spring Cloud和Flowable的第一步是引入相关依赖。在`pom.xml`文件中,我们需要添加Spring ...
3. **连接点(Join Point)**:程序执行中的特定点,如方法调用、字段赋值等。 4. **切点(Pointcut)**:定义一组连接点的规范,用于指定哪些连接点将会应用通知。切点可以基于方法签名、注解等条件定义。 5. **...
Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要侧重于提供认证(用户身份验证)和授权(访问控制)功能。 核心知识点如下: 1. 认证流程: a. 请求到来时,...
### Spring MVC 工作流程详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Java 的 Web 应用程序。它是一种模型-视图-控制器(Model-View-Controller,MVC)设计模式的具体实现...
Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动完整流程图 Spring启动...
8. **Spring的启动**:在应用程序启动时,Spring容器会加载`applicationContext.xml`文件,解析配置,创建并初始化所有的Bean。之后,可以通过容器获取到这些Bean并进行调用。 9. **Spring MVC**:如果涉及到Web...
通过运行这个小程序,我们可以看到Spring如何管理和协调这些Bean,从而理解IOC的工作原理。 总的来说,这个小程序是一个很好的学习平台,可以帮助我们深入理解Spring框架的IOC核心特性,以及如何在实际项目中应用...
Spring MVC 核心流程图,清晰介绍了spring mvc中的控制流程
1. **Spring Boot**: Spring Boot 是一个用于简化 Spring 应用程序初始搭建以及开发过程的框架。它预设了各种默认配置,使得开发者可以快速创建独立的、生产级别的基于 Spring 的应用程序。 2. **Eureka**: Spring ...
**五、Spring Ioc的工作流程** 1. **读取配置**:Spring容器读取XML、Java配置或基于注解的配置信息,构建BeanDefinition对象,其中包含了对象的类名、属性、依赖等信息。 2. **Bean实例化**:根据BeanDefinition,...
Spring框架是Java开发中广泛使用的轻量级框架,尤其在企业级应用开发中扮演着核心角色。这个"spring小程序"的描述表明它是一个用于学习...通过阅读源代码,可以学习到Spring框架的核心工作原理,从而提升Java开发能力。
在IT行业中,Spring框架是Java企业级应用开发的首选,而Activiti则是一个流行的工作流管理系统,用于自动化业务流程。将Spring与Activiti整合,可以充分利用Spring的强大功能来管理和驱动Activiti工作流,实现灵活、...
1. Spring容器的启动流程 2. 循环依赖 3. Spring 中Bean的创建 4. Spring 方法xmind脑图
总的来说,这个压缩包文件的内容涵盖了从基础到高级的Spring生态系统知识,包括Spring 5的核心特性、Spring Boot 2.0的简化开发流程,以及Spring Cloud在构建可扩展、健壮的微服务架构中的应用。学习这些内容将使...