SpringMVC 中有以下几个核心组件有哪些?

DispatcherServlet:它是整个SpringMVC框架的核心,负责请求的转发和处理,同时负责拦截器、视图解析器、异常处理等组件的调度。DispatcherServlet继承了HttpServlet,并覆盖了doService方法,可以通过自定义DispatcherServlet进行定制。

HandlerMapping:它是用来映射请求和处理器的组件。SpringMVC提供了多种 HandlerMapping 实现,包括 BeanNameUrlHandlerMapping、ControllerBeanNameHandlerMapping、RequestMappingHandlerMapping 等。HandlerMapping 在初始化时会将所有的映射关系进行解析和缓存,用于在请求到达 DispatcherServlet 后找到对应的处理器。

HandlerAdapter:它是用来适配处理器和 HandlerMapping 的组件。HandlerAdapter 的职责是负责将请求转换为适合处理器调用的形式,并将处理器的返回值转换为适合渲染视图的形式。

HandlerInterceptor:它是用来拦截请求和处理器的组件。HandlerInterceptor 提供了三个拦截器方法 preHandle、postHandle 和 afterCompletion,用于在请求前、请求后和渲染视图后执行自定义的逻辑。HandlerInterceptor 在 HandlerMapping 中被调用,可以进行请求预处理、安全控制、日志记录等操作。

ViewResolver:它是用来解析视图名称和视图对象的组件。SpringMVC 提供了多种 ViewResolver 实现,包括 InternalResourceViewResolver、VelocityViewResolver、FreeMarkerViewResolver 等。ViewResolver 的职责是将视图名称解析为视图对象,并将视图对象渲染到响应中。

ExceptionResolver:它是用来解析异常和处理异常的组件。SpringMVC 提供了多种 ExceptionResolver 实现,包括 SimpleMappingExceptionResolver、DefaultHandlerExceptionResolver、ResponseStatusExceptionResolver 等。ExceptionResolver 的职责是将异常解析为对应的错误响应,提供友好的错误提示。

ViewResolver:将逻辑视图名解析成具体的视图实现,通常是 JSP 或 Thymeleaf 等视图模板引擎。

ModelAndView:封装了视图名称和模型对象(Model),以及视图渲染所需要的其他属性。

Model:模型对象,包含控制器处理请求时需要的数据。

View:视图对象,用于展示模型数据。

LocaleResolver:根据请求头部信息确定客户端的区域信息,从而实现国际化。

MultipartResolver:用于处理文件上传请求,将上传的文件转换为 MultipartFile 对象。

FlashMapManager:用于在重定向时保存数据,避免因为重定向导致数据丢失。

以上组件的初始化顺序是:HandlerMapping -> HandlerAdapter -> HandlerInterceptor -> ViewResolver -> ExceptionResolver。