Spring MVC
一、基本概念
MVC: web领域的一个设计模式,将资源划分为模型、视图、控制器
Model: 数据对象,接收前端的数据,实现请求的业务功能,共享数据给视图
View: 前端页面
Controller: 控制页面的跳转
二、基础使用
xml
DispatcherServlet: 在web.xml中配置前端控制器,以及指定配置文件
静态资源处理器:<mvc:default-servlet-handler/>
MVC注解解析器:<mvc:annotation-driven/>
视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/views/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
文件上传解析器:
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
拦截器:
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--指定对哪些资源做拦截/**,所有的资源-->
<mvc:mapping path="/**"/>
<!--指定不对哪些资源做拦截-->
<!--<mvc:exclude-mapping path="/login.jsp"/>-->
<bean class="cn.wolfcode._05_interceptor.CheckLoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
注解
@RequestMapping: 请求地址映射
@RequestParam: 表示需要一个请求参数,主要用于当方法参数名与前端传递请求的参数名不一致时使用
@RequestBody: 将请求体转换为参数对象,默认只会将请求体中的json字符串转换为Java对象或map对象,可以增加xml处理依赖,也可以支持将xml转换为Java对象
@RequestHeader: 快速从请求头中获取值并映射到犯法参数中。
@PathVariable: 路径参数,可以将请求路径中对应位置的参数映射到方法参数中
@CookieValue: 快速从Cookie中取出指定的值映射到参数中
@ResponseBody: 将对象转换为json返回到前端,前提是必须要有jackson或其他json转换工具的依赖,不再返回视图,而是直接使用HttpServletResponse返回原生的数据。
@RestController: 集合@Controller和@ResponseBody
@ModelAttribute: 快速将参数对象共享给视图。
三、拓展功能
参数解析器:
可以根据参数类型,自行实现参数解析方案,并注入参数对象。
HandlerMethodArgumentResolver
统一异常处理
将项目中所有的异常集中进行处理,统一响应结果以及状态码
@ControllerAdvice / @RestControllerAdvice: Controller的AOP增强,可以返回视图,也可以返回json数据
@ExcetpionHandler: 标注方法为异常处理方法,可以针对指定类型的异常进行处理,最终返回异常响应结果。
文件上传: MultipartFile
ResponseEntity:
SpringMVC响应实体构建对象,可以利用建造者模式快速构建响应实体对象,设置响应体、状态码以及响应头、Cookie等相关信息。
统一响应结果
对所有响应结果做增强,可以实现统一响应R.ok(obj)对象的功能。
ResponseBodyAdvice
四、SpringMVC执行流程
- 用户发送请求到前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
- HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象以及处理器拦截器(如果有),再一起返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter(处理器适配器)。
- HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
- Controller执行完成返回ModelAndView对象。
- HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
- ViewReslover解析后返回具体View(视图)。
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户。