• 尚硅谷SpringMVC篇


    学习链接:https://www.bilibili.com/video/BV1Ry4y1574R?p=97&vd_source=510ec700814c4e5dc4c4fda8f06c10e8

    代码地址:https://gitee.com/empirefree/SpringBoot-summarize/tree/尚硅谷-SpringMVC篇/

    csdn csdn csdn csdn csdn


    1. 基本概念

    1.1. 基本简介

    1.1.1 MVC

    ​ MVC是一种软件架构思想

    1. MODEL: 模型层,用于处理数据的javaBean,分2类
     	1. 实体类bean: Student,User类
     	2. 业务处理bean: Service, dao对象
    2. View: html, jsp界面
    3. Controller: 控制层,Servlet,用于接收和响应浏览器
    
    1.1.2 SpringMVC
    1.1.2.1 基本引用

    ​ Spring的子项目,基于原生Servlet,通过前端控制器DispatcherServlet对请求和响应进行统一处理

            // 需要导入springmvc的包,在springboot中spring-boot-starter-web内嵌了该包。另外也需要开启组件扫描,@ComponentScan也提供了这个功能
    		<dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
    
    1.1.2.2 @RequestMapping
    1. value:定义路径
    2. method: 默认支持get,post。定义请求方式

    @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

    ​ 也可以采用RestFul风格,使用 header,params

    注:HttpServletRequest,HttpServletResponse原生servlet能请求、响应header,body中数据,SpringMVC中也存在类似的处理方法

    1.1.2.3 请求参数
        /**
         * 跨域:浏览器不能携带http://域名:端口 这种其他域名下的cookie,ajax请求
         * 解决办法:前后端都需要配置,后端配置CORS,就是前端携带上Access-Control-Allow-Origin
         *
         * CSRF攻击:利用用户之前登录过网站的cookie。可以利用每次携带上token解决
         *
         */
    @RequestParam(required = false, value = "12", defaultValue = "123")String id,
    @RequestHeader(required = false, value = "13", defaultValue = "333")String name,
    @CookieValue("JSESSIONID")String jessionid
    
    1.1.3 RestFul

    Rest: Representational state transfer。客户端和服务端之间资源传输

    1.1.4 HttpMessageConverter

    ​ 报文信息转换器:请求报文和java对象的互相转换

    @RequestBody, RequestEntity, @ResponseBody @RestController ResponseEntity

    1.1.4.1 @RequestBody

    获取请求体中入参。

    1.1.4.2 RequestEntity

    ​ 可以获取请求体和请求头

    1.1.4.3 @ResponseBody
    1. 当修饰方法的时候表示返回是个数据success,没有修饰方法的时候表示跳转success界面,然后@RestController内置@ResponseBody,所以Controller层默认都是返回success。
    2. SpringBoot-starter内置jackson包,所以不需要担心json转换问题
    
        @RequestMapping(
                value = {"/requestEntityTest", "/flatUser2"},
                method = {RequestMethod.GET, RequestMethod.POST}
        )
        public String requestEntityTest(RequestEntity<String> 
            return "success";
        }
    
    1.1.4.4 @RestController

    ​ @Controller和@ResponseBody,简化数据传输

    1.1.4.5 ResponseEntity

    实现下载功能,SpringMVC下载需要multipartResolver的bean文件上传解析器,SpringBoot中MultipartAutoConfiguration配置引入了

    1.1.5 拦截器
    1.1.5.1 基本概念

    原始过滤器:

    ​ 请求-> 过滤器-> 前端控制器DispatcherServlet-> controller层

    拦截器:

    ​ 拦截器是用来拦截控制器方法的

    多个拦截器就按照Bean注入顺序:preHnadle顺序,postHandle,AfterCompletion是逆序

    1. prehandle在controller执行方法之前。
    2. postHandle在controller执行方法之后
    1. afterCompletion在ModelAndView渲染视图完毕之后执行
    
    1.1.6 异常处理器
    1.1.6.1 基本概念

    SpringMVC提供异常处理接口:HandlerExceptionResolver,该接口实现类如下

    1. SimpleMappingExceptionResolver
    1. DefaultHandlerExceptionResolver(默认)
    

    就是@ControllerAdvice+ @ExceptionHandler实现

    1.1.7 注解代替Web.xml

    ​ 1. Servlet3.0之后定义一个类实现抽象初始化方法就能代替web.xml(webInit),SpringBoot中已有

    ​ 2. 自定义配置类实现WebMvcConfigurer接口来实现各个功能(配置类,实现类)


    1.2 执行流程

    1.2.1 基本概念
    1.2.1.1 基本组件
    1. DispatcherServlet: 前端控制器,统一处理请求和响应
    2. HandlerMapping:根据url,method找到handler
    3. Handler:就是Controller层
    4. HandlerAdapter:处理器适配器,上面handlerMapping找到后由HandlerAdapter来执行
    5. ViewResolver:视图解析器,视图解析成Thymeleaf
    6. View:就是展示视图,返回前端代码
    1.2.1.2 DispatcherServlet初始化、服务、调用源码(略)

    ​ 本质就是一个Servlet

    1.2.1.3 SpringMVC执行流程
    1. 由DispatcherServlet接受用户请求,查看URL是否存在

      1. 若不存在,则判断是否有默认Servlet来请求静态配置资源(就是看正常url找不到就看是不是访问的静态资源)
      <mvc:default-servlet-handler/>
      --SpringBoot中整合成了spring.mvc.static-path-pattern,也可以在配置类中注入bean实现
      
      1. 若配置了,就找,没配置,返回前端控制器的404
      
    2. 若URL存在,先调用HnadlerMapping找到Handler和Handler拦截器,以HandlerExecution执行链对象返回

    3. 然后DisPatcherServlet找到合适的HandlerAdapter,先执行preHandle,再执行Controller方法

    4. Handler执行完成后,向DispatcherServlet返回ModelAndView对象

    5. 然后HttpmessageConveter进行数据格式返回,执行PostHandle对象,判断是否有异常,执行HandlerException

    6. 渲染完毕后执行拦截器的afterCompletion方法

    1.3 个人总结

    image-20220731121747821

    Spring主要是生成对象、自定义切面、然后自定义配置类(需要开启组件扫描,配置AOP等切面包)
    SpringMVC主要是控制web请求响应,定义拦截器之类(也需要开启mvc功能)
    Mybatis主要是和数据库的交互(需要配置mybatis-starter启动器)
    
  • 相关阅读:
    硬件IC汇总
    stm8s103调试注意点
    感悟短句
    USB接口
    液晶屏驱动注意
    四数之和
    所有奇数长度子数组的和
    秋叶收藏集
    删除中间节点
    组合总和
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/16536841.html
Copyright © 2020-2023  润新知