[全家桶之SpringMVC]SpringMVC 的模块和结构

2023-09-21 08:48:20

目录

SpringMVC的模块

Web模块

WebMVC模块

SpringMVC的结构


SpringMVC的模块

SpringMVC的模块主要包括以下几个:

  • Web模块:这个模块提供了Spring对Web项目的支持,包括文件上传、异常处理、国际化、主题等功能。
  • WebMVC模块:这个模块是SpringMVC的核心,它包含了前端控制器、处理器映射器、处理器适配器、视图解析器等组件,以及对RESTful风格的URL、数据绑定、校验、拦截器等功能的支持。
  • WebServlet模块:这个模块提供了一些与Servlet相关的类和接口,例如DispatcherServlet、HttpServletBean等。
  • WebPortlet模块:这个模块提供了与Portlet相关的类和接口,例如DispatcherPortlet、PortletMVC注解等。

下面我们来详细介绍一下这些模块中的一些重要的组件和功能。

Web模块

Web模块是Spring对Web项目的支持,它提供了以下一些功能:

  • 文件上传:Spring提供了一个MultipartResolver接口,用于解析multipart请求,即包含文件上传的请求。Spring提供了两个实现类:CommonsMultipartResolver和StandardServletMultipartResolver,分别基于Apache Commons FileUpload和Servlet 3.0规范实现文件上传功能。
  • 异常处理:Spring提供了一个HandlerExceptionResolver接口,用于处理Controller中抛出的异常。Spring提供了几个实现类,如SimpleMappingExceptionResolver、AnnotationMethodHandlerExceptionResolver等,可以根据异常类型或注解来映射到不同的错误页面或返回不同的错误信息。
  • 国际化:Spring提供了一个LocaleResolver接口,用于解析用户的语言和地区信息。Spring提供了几个实现类,如CookieLocaleResolver、SessionLocaleResolver等,可以根据Cookie或Session来存储和获取用户的语言和地区信息。Spring还提供了一个MessageSource接口,用于加载国际化资源文件,并根据LocaleResolver返回的Locale对象来获取相应的国际化信息。
  • 主题:Spring提供了一个ThemeResolver接口,用于解析用户的主题信息。Spring提供了几个实现类,如CookieThemeResolver、SessionThemeResolver等,可以根据Cookie或Session来存储和获取用户的主题信息。Spring还提供了一个ThemeSource接口,用于加载主题资源文件,并根据ThemeResolver返回的Theme对象来获取相应的主题信息。

WebMVC模块

WebMVC模块是SpringMVC的核心,它包含了以下一些组件和功能:

  • 前端控制器:DispatcherServlet是一个Servlet,它负责接收和分发请求。它是整个SpringMVC框架的入口点,它会调用其他组件来完成请求处理。
  • 处理器映射器:HandlerMapping是一个接口,它负责根据请求的URL找到对应的处理器Handler(也就是Controller)。Spring提供了几个实现类,如BeanNameUrlHandlerMapping、RequestMappingHandlerMapping等,可以根据Bean名称或注解来映射到不同的Handler。
  • 处理器适配器:HandlerAdapter是一个接口,它负责根据HandlerMapping返回的Handler执行相应的方法,并返回一个ModelAndView对象,包含了数据和视图信息。Spring提供了几个实现类,如HttpRequestHandlerAdapter、RequestMappingHandlerAdapter等,可以根据Handler的类型或注解来执行不同的方法。
  • 视图解析器:ViewResolver是一个接口,它负责根据ModelAndView中的视图名找到对应的视图对象View(例如JSP页面)。Spring提供了几个实现类,如InternalResourceViewResolver、FreeMarkerViewResolver等,可以根据视图名的后缀或前缀来解析到不同的视图对象。
  • 视图对象:View是一个接口,它负责渲染数据到页面,并返回给用户。Spring提供了几个实现类,如InternalResourceView、FreeMarkerView等,可以根据不同的模板技术来渲染页面。

除了这些组件外,WebMVC模块还提供了以下一些功能:

  • RESTful风格的URL:Spring支持使用@PathVariable注解来获取URL中的变量,例如/user/{id},可以通过@PathVariable(“id”)来获取id的值。Spring还支持使用@RequestBody和@ResponseBody注解来处理请求和响应的数据,例如可以使用@RequestBody来接收JSON格式的数据,并使用@ResponseBody来返回JSON格式的数据。
  • 数据绑定:Spring支持使用@ModelAttribute注解来绑定请求参数到JavaBean对象,例如可以使用@ModelAttribute(“user”) User user来接收表单提交的user对象。Spring还支持使用@InitBinder注解来自定义数据绑定的规则,例如可以使用@InitBinder来注册自定义的类型转换器或校验器。
  • 校验:Spring支持使用@Valid注解来启用JavaBean对象的校验,例如可以使用@Valid User user来校验user对象是否符合约束条件。Spring还支持使用BindingResult或Errors对象来获取校验结果和错误信息。
  • 拦截器:Spring支持使用HandlerInterceptor接口或@WebMvcConfigurer接口来定义拦截器,用于在请求处理前后进行一些额外的操作,例如日志记录、权限检查、性能监控等。Spring还支持使用@InterceptorRegistry类来注册拦截器,并指定拦截或排除的URL模式。

SpringMVC的结构

SpringMVC的结构可以用以下一张图来表示:(这个也是SpringMVC的启动流程,面试爱考)

从上图可以看出,SpringMVC的工作流程大致如下:

  • 用户发送请求到前端控制器DispatcherServlet,它是一个Servlet,负责接收和分发请求。
  • DispatcherServlet调用处理器映射器HandlerMapping,它是一个接口,负责根据请求的URL找到对应的处理器Handler(也就是Controller)。
  • DispatcherServlet调用处理器适配器HandlerAdapter,它是一个接口,负责根据HandlerMapping返回的Handler执行相应的方法,并返回一个ModelAndView对象,包含了数据和视图信息。
  • DispatcherServlet调用视图解析器ViewResolver,它是一个接口,负责根据ModelAndView中的视图名找到对应的视图对象View(例如JSP页面)。
  • DispatcherServlet调用视图对象View,它是一个接口,负责渲染数据到页面,并返回给用户

                                                                                                                        春风得意马蹄疾,一日看尽长安花——孟郊

更多推荐

在Android Studio中,如何通过CMake 配置文件来实现多个动态依赖库的编译?

在AndroidStudio中,如何通过CMake配置文件来实现多个动态依赖库的编译?Author:LycanNote:以下问题解答通过大模型生成,主要用于个人学习和备忘,仅供参考,若有错误或者侵权,请联系我修正,谢谢。问题在AndroidStudio中,如何通过CMake配置文件来实现多个动态依赖库的编译?请一步一步

离散高斯抽样(Discrete Gaussian Sampling)

离散高斯抽样离散高斯抽样(DiscreteGaussianSampling)是一种常见于密码学和数学领域的随机采样方法。它通常用于构建基于格(lattice)的密码学方案,如基于格的加密和数字签名。DiscreteGaussianSampling的主要目的是从一个离散的集合中随机选择元素,同时遵循高斯分布(Gaussi

C# 随机数生成 Mersenne Twister 马特赛特旋转演算法 梅森旋转算法

NuGet安装MathNet.Numerics引用:usingMathNet.Numerics.Random;///<summary>///包括lower,不包括upper///</summary>///<paramname="lower"></param>///<paramname="upper"></param>/

vue3 的CreateApp

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录从一个例子开始从一个例子开始constHelloVueApp={data(){return{message:'HelloVue!'}}}Vue.createApp(HelloVueApp).mount('#he

【Acorn】JS解析器编译原理

Acorn是什么?Acorn是一个用JavaScript编写的解析器,专门用于将源代码解析为抽象语法树(AbstractSyntaxTree,AST)。它是一个轻量级、高性能的解析器,被广泛应用于许多JavaScript工具和框架中。Acorn的整体工作流程输入源代码(InputSourceCode):接收JavaSc

虚拟列表 - Vue3实现一个可动态改变高度的虚拟滚动列表

虚拟列表-Vue3实现一个可动态改变高度的虚拟滚动列表前言在开发中经常遇到大量的渲染列表数据问题,往往我们就只是简单地遍历渲染,没有过多地去关注是否会存在性能问题,这导致如果数据量较大的时候,比如上万条数据,将会在dom中渲染上万个节点,这将加大浏览器的开销,可能会导致页面卡顿,加载慢等性能问题。因此,在渲染大量数据时

长安链上线可视化敏捷测试工具v1.0版本

开发者对区块链底层平台进行初步的了解后,一项经常会涉及到的工作是对平台进行测试以考量其性能及稳定性是否符合自身使用需求。长安链推出了可视化UI操作界面的区块链敏捷测试工具v1.0版本,当前版本可对内置合约进行压测并生成网络拓扑图以验证组网方式。图1区块链性能测评平台是基于长安链2.3.0版本实现,用户在前端页面选择输入

计算机毕设项目之基于springboot+vue+mysql的大学生就业服务平台的设计与实现(内含源码+文档+教程)

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌🍅由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。🍅2023年-2024年最新计算机毕业设计本科选题大全汇总感兴趣的可以先收藏

简单介绍十款可以免费使用的API测试工具

API开发应该是后端开发最常见的工作,而调试和测试API是非常关键的,这篇文章简单介绍几款常用的工具以供大家参考。SoapUISoapUI是很老牌的工具的,在之前Webservice盛行的时候经常会用到。现在官方推出了Pro版本的ReadyAPI,但要收费,它功能更强大,但是太贵了。PostmanPostman是一款很

解锁汽车自动驾驶的密码:L0到L5六个等级全解析

引言随着智能网联汽车技术的快速发展,自动驾驶已成为汽车产业发展的重要方向。根据国际公认的标准,汽车自动驾驶可分为六个等级:L0级到L5级,等级越高意味着自动化程度越高。那么这六个等级具体有何区别呢?本文将详细介绍汽车自动驾驶的六个等级标准。自动驾驶的6个等级(L0-L5)L0级是完全的手动驾驶,驾驶员要完成汽车的全部操

【深度学习】ONNX模型多线程快速部署【基础】

【深度学习】ONNX模型CPU多线程快速部署【基础】提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论文章目录【深度学习】ONNX模型CPU多线程快速部署【基础】前言搭建打包环境python多线程并发简单教程基本教程ONNX模型多线程并发打包成可执行文件总结前言之前的内容已经尽可能简单、详细的介绍CP

热文推荐