请简述你对SpringMVC的理解

SpringMVC是一种基于Java语言开发,实现了WebMVC设计模式,请求驱动类型
的轻量级Web框架。
采用了MVC架构模式的思想,通过把Model,View,Controller分离,将Web层进
行职责解耦,从而把复杂的Web应用分成逻辑清晰的几个组件,在SpringMVC中有
9大重要的组件。
下面详细说明一下这些组件的作用和初始化方法:
1、MultipartResolver文件处理器
对应的初始化方法是initMultipartResolver(context),用于处理上传请求。
2、LocaleResolver当前环境处理器
其对应的初始化方法是initLocaleResolver(context)
SpringMVC主要有两个地方用到了Locale:
一是ViewResolver视图解析的时候;
二是用到国际化资源或者主题的时候。
3、ThemeResolver主题处理器
其对应的初始化方法是initThemeResolver(context),
用于解析主题。也就是解析样式、图片及它们所形成的显示效果的集合。
4、HandlerMapping处理器映射器
其对应的初始化方法是initHandlerMappings(context),
在SpringMVC中会有很多请求,每个请求都需要一个Handler处理。
HandlerMapping的作用便是找到请求相应的处理器Handler和Interceptor。
5、HandlerAdapter处理器适配器
其对应的初始化方法是initHandlerAdapters(context)
从名字上看,它就是一个适配器。HandlerAdapters要做的事情就是如何让固定的
Servlet处理方法调用灵活的Handler来进行处理
6、HandlerExceptionResolver异常处理器
对应的初始化方法是initHandlerExceptionResolvers(context)
它的主要作用是处理其他组件产生的异常情况。
7、RequestToViewNameTranslator视图名称翻译器
其对应的初始化方法是initRequestToViewNameTranslator(context)
它的作用是从请求中获取ViewName。
有的Handler处理完后并没有设置View也没有设置ViewName,这时就需要从
request中获取,而RequestToViewNameTranslator就是为request提供获取
ViewName的实现。
8、ViewResolvers页面渲染处理器
其对应的初始化方法是initViewResolvers(context)
ViewResolvers的主要作用是将String类型的视图名和Locale解析为View类型的视
图。
9、FlashMapManager参数传递管理器
其对应的初始化方法是initFlashMapManager(context)
在实际应用中,为了避免重复提交,我们可以在处理完post请求后重定向到另外一个
get请求,这个get请求可以用来返回页面渲染需要的信息。
FlashMap就是用于这种请求重定向场景中的参数传递。
在SpringMVC的九大组件中,涉及到请求处理响应的核心组件分别是:
1.HandlerMapping、
2.HandlerAdapter、
3.ViewResolver
这张图表示这三个组件的整体执行流程,具体调用分为以下几个步骤:
1、HandlerMapping回到调用HandlerAdapter
2、HandlerAdapter会返回ModelAndView
3、ModelAndView根据用户传入参数得到ViewResolvers
4、ViewResolvers会将用户传入的参数封装为View,交给引擎进行渲染。
注意:有大家最熟悉的两个类:ModelAndView和View类并不属于SpringMVC九
大组件之列。

相关推荐

  1. 谈谈Seata理解

    2024-02-23 20:46:01       59 阅读
  2. 谈谈 ES6 理解

    2024-02-23 20:46:01       33 阅读
  3. 简述css工程化理解

    2024-02-23 20:46:01       34 阅读
  4. SpringMVC 理解

    2024-02-23 20:46:01       52 阅读
  5. 谈谈线程安全理解

    2024-02-23 20:46:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-23 20:46:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 20:46:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 20:46:01       82 阅读
  4. Python语言-面向对象

    2024-02-23 20:46:01       91 阅读

热门阅读

  1. 《C++进阶--3.函数提高》

    2024-02-23 20:46:01       48 阅读
  2. C++之STL:unordered_map 容器

    2024-02-23 20:46:01       52 阅读
  3. LeetCode56.合并区间

    2024-02-23 20:46:01       46 阅读
  4. AutoSAR(基础入门篇)10.6-模式管理进阶

    2024-02-23 20:46:01       50 阅读
  5. LeetCode206链表相交

    2024-02-23 20:46:01       54 阅读