SpringMVC 运行原理及主要组件

运行原理图

在这里插入图片描述

组件介绍

①DispatcherServlet(前端/核心控制器)
整个流程控制的核心,调用其他组件处理用户的请求,降低了组件之间的耦合性
MVC模式:一个WEB应用中,只有唯一的一个控制器和客户端交互,所有的客户端和服务器单点接触,这个控制器称为核心控制器(前端控制器)。
传统定义中,核心控制器使用Servlet实现。
MVC优势:单点接触,有效的解耦,实现功能的重用。

②HandlerMapping(处理映射器)
复责根据用户请求找到Handler(处理器,如用户自定义的Control),SpringMVC提供了不同的映射器实现不同的映射方式:
配置文件方式、实现接口方式、注解方式
映射器内部封装了一个类似map的数据结构,使用URL作为key,HandleExecutionChain作为value。
必不可少的组件,无论是否配置,SpringMVC默认提供:
由<mvc:annotation-driven>配置时,默认映射器为RequestMappingHandleMapping
若无该标签,且用注解开发,默认映射器为RequestMappingHandleMapping(老版本有其他的,过时了)

③HandlerAdapter(适配器)
通过HandleAdapter对处理器(Handler)进行执行,适配器的应用,通过扩展适配器可以对更多类型的处理器进行执行
最基础的适配器:SimpleControllerHandlerAdapter,处理自定义控制器(继承Control)和SpringMVC控制器顶级接口Controller之间关联的
必不可少的组件,无论是否配置,SpringMVC默认提供:
由<mvc:annotation-driven/>配置,适配器对象为HttpRequestHandlerAdapter

④Handler(后端控制器)
在DispatchServlet的控制下Handler对具体的用户请求进行处理
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务请求开发Handler
对Handler无强制要求,SpringMVC对Handler的引用定义类型为Object
理论不是必要的核心组件,
Ps:Spring是一个线程不安全的,轻量级的框架,一个Handler对象需处理所有请求,需注意线程安全问题。
该组件是DispatchServlet通过HandlerMapping通过getBean获取到,并进行缓存,即只有一个Handler(单例)
一般在Handler所对应的类中只定义只读服务提供属性,或静态final变量,或通过ThreadLocal

⑤ViewResolver(视图解析器)
负责将处理结果(MAV,ModelAndView)生成View视图,
首先根据逻辑视图名解析成物理视图名(即加前/后缀),然后对View进行渲染将处理结果通过页面展示给用户
必要的组件之一,SpringMVC默认提供:
InternalResourceViewResolver,内部资源视图解析器
视图解析器是用于处理动态逻辑视图的,静态视图逻辑不通过SpringMVC流程,直接通过WEB中间件(如Tomcat,静态资源配置)访问

运行流程

发送请求------->DisptcherServlet------->HandlerMapping------->HandlerAdapter-------->Controller-------->ViewResolver-------->响应请求

如果在web.xml中设置DispatcherServlet的<url-pattern>为/(表拦截器)时,当用户发起请求,请求一个控制器,首先会执行DispatcherServlet,由DispatcherServlet调用HandlerMapping的DefaultAnnotationHandlerMapping解析URL,解析后调用HandlerAdapter组件的AnnotationMethodHandlerAdapter调用Controller中的HandlerMethod,当HandlerMethod执行完成后会返回View,它会被ViewResolver进行视图解析,解析后调用jsp对应的.class文件并运行,最终把运行的.class文件的结果响应给客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值