1. SpringMVC介绍
- SpringMVC是Spring框架的一个模块,SpringMVC和Spring无需通过中间整合层进行整合
- SpringMVC是一个基于MVC的web框架
- SpringMVC表现层:方便前后端数据的传输
- SpringMVC拥有控制器,接受外部请求,解析参数传给服务层
图片来源于网路
2.SpringMVC构架原理解析
- 发起请求到前端控制器(DispatcherServlet)
- 前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找
- 处理器映射器HandlerMapping向前端控制器返回Handler
- 前端控制器调用处理器适配器去执行Handler
- 处理器适配器去执行Handler
- Handler执行完成给适配器返回ModelAndView
- 处理器适配器向前端控制器返回ModelAndView,ModelAndView是SpringMVC框架的一个底层对象,包括Model和View
- 前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
- 视图解析器向前端控制器返回View
- 前端控制器进行视图渲染,视图渲染键模型数据(在ModelAndView对象中)填充到request域
- 前端控制器向用户响应结果
3. 组件
- 前端控制器DispatcherServlet(不需要程序员开发)
作用:接收请求,响应结果,相当于转发器,中央处理器
有了DispatcherServlet减少了其他组件之间的耦合度 - 处理器映射器HandlerMapping(不需程序员开发)
作用:根据请求的url查找Handler - 处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler - 处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler - 视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view) - 视图View(需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
4.配置解析
- DispatcherServlet
DispatcerServlet是前端控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据响应的规则分发到目标Controller来处理,是配置SpringMVC的第一步 - InternalResourceViewResolve
视图名称解析器 - 以下出现的注解
@Controller 负责注册一个bean到Spring上下文中
@RequestMapping注解为控制器指定可以处理哪些URL请求
5.常用注解
- @Controller
负责注册一个bean到Spring上下文中 - @RequestMapping
注解为控制器指定可以处理哪些URL请求 - @RequestBody
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上,再把HttpMessageConverter返回的对象数据绑定到Controller中的方法的参数上 - @ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter强制转换为指定格式后,写入到Response对象的body数据区 - @ModelAttribute
在方法定义上使用@ModelAttribute注解:SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法
在方法的入参前使用@ModelAttribute注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中 - @RequestParam
在处理方法入参处使用,可以把请求参数传递给请求方法 - @PathVariable
绑定URL占位符到入参 - @ExceptionHandler
注解到方法上,出现异常时会执行该方法 - @ControllerAdvice
使用一个Controller成为全局的异常处理类,类中使用@ExceptionHandler注解的方法 可以处理所有Controller发生的异常