开发工具与关键技术:IDEA与java语言
作者:陈鑫鹏
撰写时间:2021年8月6日
Spring MVC简介
MVC 设计不仅限于Java Web应用,还包括许多应用,比如前端、PHP、.NET 等语言。之所 以那么做的根本原因在于各个模块的解耦。
MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责
模型:用于存储数据以及处理用户请求的业务逻辑。
视图:向控制器提交数据,显示模型中的数据。
控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。
Spring MVC:
Spring MVC 实现了即用的 MVC 的核心概念。它为控制器和处理程序提供了大量与此模式相关的功能。并且当向 MVC 添加反转控制(Inversion of Control,IoC)时,它使应用程序高度解耦,提供了通过简单的配置更改即可动态更改组件的灵活性。
Spring MVC 框架是高度可配置的,包含多种视图技术,例如 JSP 、Velocity、themlefy等。Spring MVC 框架并不关心使用的视图技术,也不会强迫开发者只使用 JSP 技术,但教程中使用的视图是 JSP。
Spring MVC初学重点掌握的4个接口
- DispatcherServlet
Spring MVC 所有的请求都经过 DispatcherServlet 来统一分发,DispatcherServlet 将请求分发给Controller之前需要借助 Spring MVC 提供的 HandlerMapping 定位到具体的 Controller - HandlerMapping
HandlerMapping 接口负责完成客户请求到 Controller 映射 - Controller
Controller接口将处理用户请求,这和 Java Servlet 扮演的角色是一致的。一旦 Controller 处理完用户请求,将返ModelAndView 对象给 DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和视图(View)。从宏观角度看DispatcherServlet是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程中的控制器,而 ModelAndView 是 Http 请求过程中返回的模型(Model)和视图(View) - ViewResolver
ViewResolver 接口(视图解析器)在 Web 应用中负责查找 View 对象,从而将相应结果渲染给用户
Spring MVC 的工作流程如下:
① 用户发送请求至前端控制器DispatcherServlet
② DispatcherServlet收到请求,调用HandlerMapping处理器映射器
③ 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器一并返回给 DispatcherServlet
④ DispatcherServlet调用HandlerAdapter适配器
⑤ HandlerAdapter经过适配调用具体的处理器(一般是开发人员编写的Controller)
⑥ Controller执行完成返回ModelAndView
⑦ HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
⑧ DispatcherServlet将ModelAndView传给ViewReslover视图解析器
⑨ ViewReslover解析后返回具体View
⑩ DispatcherServlet根据View进行渲染视图
⑪ DispatcherServlet响应用户
DispatcherServlet也是整个Spring MVC的核心,它负责接收HTTP请求组织协调Spring MVC的各个组成部分
Spring MVC 注解:
1、@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个Spring MVC Controller 对象。通过Spring配置的注解扫描,将这个bean注册到Springmvc容器中
2、@RequestMapping
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上, 表示类中的所有响应请求的方法都是以该地址作为父路径,作用于方法上,表明该处理 器的请求地址=父路径+方法上url
它拥有6个属性:
Spring4.3 以后方法级别的@RequestMapping注解变体有如下几个:
3、@RequestBody
@RequestBody用于读取Request请求的body部分数据,使用系统默认配置的 HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把 HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上
现在更多的是把一个 json 字符串转换成一个定义好映射关系的对象。
4、@ResponseBody
ResponseBody用于将Controller的方法返回的对象,通过适当的 HttpMessageConverter转换为指定格式后,写入到Response对象的
body数据区
现在主要用于json返回
5、@RequestParam
@RequestParam主要用于在SpringMVC后台控制层获取参数,类似 request.getParameter(“name”);
@RequestParam注解主要有3个参数:
value:参数名字,即入参的请求参数名字,如 value=“userName” 表示请求的参数区中的名字为userName的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,
默认值可以是SpEL表达式,如“#{systemProperties[‘java.vm.version’]}”
6、@PathVariable
@PathVariable 映射 URL 绑定的占位。带占位符的 URL 是 Spring3.0 新增的功能, 主要用于RestFull风格的URL请求
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中
7、@ModelAttribute
Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中
可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller 继承
BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法
8、@RestController
@RestController注解就相当于@ResponseBody + @Controller合在一起的作用。
使用@RestController注解Controller,则Controller中的方法无法返回页面,配置 的视图解析器(如:InternalResourceViewResolver)不起作用,返回的内容就是return的内容