全方位渗透和探究SpringMVC的核心原理和运作机制
- SpringMVC简介
- Spring Web MVC是什么
- Spring Web MVC的工作模式
- Spring Web MVC能帮我们做什么
- SpringMVC的底层依赖
- SpringMVC工作流程
- SpringMVC中的组件
- DispatcherServlet前端控制器
- DispatcherServlet的职责和作用
- HandlerMapping处理器映射器
- Handler处理器
- HandlAdapter处理器适配器
- HandlerExecuteChain
- ViewResolver视图解析器
- DispatcherServlet职责调度
- 下一篇内容
SpringMVC简介
Spring Web MVC是一种基于Java的轻量级Web框架,它实现了Web MVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用Spring Web MVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Servlet而感到烦恼。相比于传统的Jsp/Servlet技术体系,Spring Web MVC能够帮助我们有效地简化这一步骤。
Spring Web MVC是什么
Spring Web MVC的核心思想是将应用程序的逻辑分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据,视图负责渲染数据并呈现给用户,控制器负责处理用户请求并将结果传递给视图进行呈现。这种分离使得应用程序的不同部分可以独立地进行开发和维护,提高了代码的可重用性和可维护性。
Spring Web MVC还提供了许多有用的功能,例如数据绑定、表单验证、文件上传和国际化支持等。这些功能可以帮助我们更加高效地开发Web应用程序,提高开发效率。
总之,Spring Web MVC是一种非常有用的Web框架,它能够帮助我们更加高效地开发Web应用程序,简化开发过程,提高代码的可重用性和可维护性。
Spring Web MVC的工作模式
Spring Web MVC实现了服务到工作者模式,但是还有许多优化的空间。其中,前端控制器是DispatcherServlet,应用控制器可以拆分为处理器映射器(Handler Mapping)和视图解析器(View Resolver)进行处理器和视图的管理。页面控制器/动作/处理器可以通过实现Controller接口(仅包含ModelAndView handleRequest(request, response)方法,也有人称之为Handler)来实现,也可以是任何的POJO类。此外,Spring Web MVC还支持本地化(Locale)解析、主题(Theme)解析以及文件上传等功能。
Spring Web MVC还提供了非常灵活的数据验证、格式化和数据绑定机制,这些功能可以帮助我们更加高效地开发Web应用程序。同时,Spring Web MVC还提供了强大的约定大于配置(惯例优先原则)的契约式编程支持,使得开发人员可以更加便捷地进行开发。
总之,Spring Web MVC是一种非常强大的Web框架,它提供了许多有用的功能,例如处理器映射器、视图解析器、数据验证、格式化和数据绑定机制等,可以帮助我们更加高效地开发Web应用程序。同时,Spring Web MVC还支持约定大于配置的契约式编程,使得开发人员可以更加便捷地进行开发。
Spring Web MVC能帮我们做什么
-
它能够让我们简单地设计出干净的Web层和薄薄的Web层,同时具备与Spring框架集成的特性,如IoC容器和AOP等。
-
该框架还提供了强大的约定大于配置的契约式编程支持,能够简单地进行Web层的单元测试。
-
具有特别灵活的URL到页面控制器的映射,非常容易与其他视图技术集成,如Velocity、FreeMarker等等。
-
该框架还提供了非常灵活的数据验证、格式化和数据绑定机制,能够使用任何对象进行数据绑定,不必实现特定框架的API。
-
支持灵活的本地化、主题等解析,提供了一套强大的SP标签库,简化SP开发,支持RESTful风格,并提供更加简单的异常处理和对静态资源的支持。
SpringMVC的底层依赖
接下来,利用Maven创建一个web工程(SpringMVC项目),在pom.xml文件中,添加spring-webmvc的依赖:
添加了spring-webmvc依赖之后,其他的spring-web、spring-aop、spring-context等等就全部都加入进来了。
SpringMVC工作流程
大多数面试时,关于SpringMVC的问题,超过99%都是这个问题。
所有请求都将自动拦截下来,拦截下来后,请求交给DispatcherServlet去处理,在加载DispatcherServlet时进行处理操作。
SpringMVC中的组件
DispatcherServlet前端控制器
org.springframework.web.servlet.DispatcherServlet
DispatcherServlet的职责和作用
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring loC容器无缝集成,从而可以获得Spring的所有好处。
HandlerMapping处理器映射器
在SpringMVC中,HandlerMapping负责根据用户的请求找到对应的Handler,也就是处理器(通常是我们所说的Controller)。SpringMVC提供了多种映射器来实现不同的映射方式,例如配置文件方式、实现接口方式、注解方式等。在实际开发中,注解方式是我们最常用的方式。
Handler处理器
在SpringMVC中,Handler是前端控制器DispatcherServlet的后端控制器,它负责对具体的用户请求进行处理。由于Handler需要涉及具体的业务请求,因此通常需要程序员根据业务需求进行开发。在这里,所谓的Handler其实就是我们通常所说的Controller。
HandlAdapter处理器适配器
在SpringMVC中,通过HandlerAdapter来执行处理器,这是适配器模式的一种应用。通过扩展适配器,我们可以对更多类型的处理器进行执行。这种设计模式可以帮助我们提高代码的可扩展性和灵活性。
HandlerExecuteChain
HandlerExecuteChain是SpringMVC框架中的一个重要组件,它的主要作用是管理处理请求的HandlerInterceptor拦截器和处理器Handler的执行顺序,并在执行过程中传递请求和响应对象。HandlerExecuteChain通常由DispatcherServlet负责创建和管理。
在处理请求的过程中,DispatcherServlet会首先将请求传递给HandlerInterceptor拦截器链进行处理。HandlerInterceptor拦截器可以对请求进行预处理、后处理和完成处理,从而实现诸如权限校验、日志记录、缓存等功能。在HandlerInterceptor拦截器链执行完毕后,DispatcherServlet会将请求传递给对应的Handler处理器进行处理。
在Handler处理器执行过程中,HandlerExecuteChain会负责管理HandlerInterceptor拦截器和Handler处理器的执行顺序,并在执行过程中传递请求和响应对象。HandlerInterceptor拦截器可以在Handler处理器执行前后进行处理,从而实现更加细粒度的请求处理。同时,HandlerExecuteChain还可以在Handler处理器执行完成后进行后处理,例如资源释放等操作。
总之,HandlerExecuteChain的作用是协调HandlerInterceptor拦截器和Handler处理器的执行顺序,并在执行过程中传递请求和响应对象,从而实现更加灵活、高效的请求处理。
ViewResolver视图解析器
在SpringMVC中,ViewResolver负责将处理结果生成View视图。首先,ViewResolver会根据逻辑视图名解析成物理视图名,也就是具体的页面地址。接着,ViewResolver会生成View视图对象,并对其进行渲染,将处理结果通过页面展示给用户。
SpringMVC框架提供了很多View视图类型,包括jstlView、freemarkerView、pdfView等。通常情况下,为了将模型数据通过页面展示给用户,需要使用页面标签或页面模板技术,程序员需要根据业务需求开发具体的页面。
DispatcherServlet职责调度
用户的请求首先会到达前端控制器,这个控制器可以看作是MVC模式中的控制器。在SpringMVC中,DispatcherServlet扮演着整个流程控制的中心角色,可以看作是SpringMVC的大脑。
DispatcherServlet会调用其他组件来处理用户的请求,这样一来,组件之间的耦合性就降低,本身主要用于控制流程,职责如下:
- 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传
解析: - 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它
包括一个处理器、多个HandlerInterceptor拦截器): - 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器):
- 通过ViewResolver解析逻辑视图名到具体视图实现;
- 本地化解析:
- 渲染具体的视图等:
- 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
下一篇内容
【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究SpringMVC的核心原理和运作机制(组件详解原理篇)