SpringMVC

142 阅读3分钟

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执行流程

file

  1. 用户发送请求到前端控制器DispatcherServlet。
  2. DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
  3. HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象以及处理器拦截器(如果有),再一起返回给DispatcherServlet。
  4. DispatcherServlet调用HandlerAdapter(处理器适配器)。
  5. HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
  6. Controller执行完成返回ModelAndView对象。
  7. HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
  8. DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
  9. ViewReslover解析后返回具体View(视图)。
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet响应用户。