• springboot3:web开发


    一.web开发

    1.springboot底层为springmvc的自动配置

    • 视图解析器
    • 静态资源(以前配置默认servlet处理)
    • 自动注册(格式化数据)
    • 静态页支持(指定位置自动发现)
    • 网站小图标自动显示

    2.静态资源访问

    ①具体使用

    • 静态资源目录(类路径下)
      /static /pulic /resources /META-INF/resources
    • 只要资源放在静态资源路径下,则直接访问 当前项目的根路径/ + 静态资源名
    • 静态资源访问带前缀
      默认无前缀
      配置一个spring:mvc:static-path-pattern: /res/**
      访问为当前项目+ static-path-pattern+静态资源名
    • 静态资源访问指定目录
      resources: static-locations: classpath:/haha
    • 欢迎页
      • 静态资源路径下 名字为index.html(可以定义一个自定义图标,但是名称固定favrcon.ico,位置放在静态资源路径下)
      • controller 找到处理index请求的有返回页面也行
    • 注意:自定义路径会影响欢迎和图标功能失效

    ②原理使用

    • 例子:加入一个controller和静态资源名字一样。此时只访问controller
    • 静态资源实际上映射为/**
      请求进来先去找controller处理,不能处理的所有请求交给静态资源处理器。静态资源就会去前面设置的目录找资源。静态资源也找不到,404。
      注意:/*代表一层目录或目录下的文件 /**代表任意层目录任意文件

    ③静态资源底层原理

    • 启动会加载自动配置类
    • springmvc的自动配置类集中在WebMvcAutoConfiguration
    • 配置类是否生效(生效),看给容器中配了什么
    • 类中的有一个内部配置类来配置webMVC
    • 该内部配置类所绑定的配置类为WebMvcProperties,ResourceProperties(这两个配置类分别以配置文件中前缀为spring.mvc,spring.resources来获得值 spring.resources.xxx)
    • 该内部配置类的构造器形参其中有一个(形参默认在IOC容器中寻找)
      esourceHandlerRegistrationCustomizer 找到 资源处理器的自定义器。
    • 内部配置类中有一个方法为addResourceHandlers(增加资源处理器)
      • 配置 静态资源访问禁用或开启(从ResourceProperties中获取配置)
      • 可以配置 浏览器中的缓存
      • 开始注册访问规则
        • /webjars/** -> classpath:/META-INF/resources/webjars/
        • 获取staticpathpattern(从WebMvcProperties中获取值 spring.mvc.xxx),如果没有,则默认/**在指定的静态目录下找,如果有,则加入在/xxx/**在指定目录找
    • 内部配置类中还有一个方法为 welcomePageHandlerMapping
      • 底层会构造一个handlermapping(路径+处理请求的方法)
        • 如果欢迎页index存在且/** 则转到欢迎页
        • 否则调用controller看谁能处理index

    3.请求映射

    3.1rest使用

    ①具体使用(getmapping=@requestmapping+get方法)

    • @RequestMapping
    • rest风格
    • 以前:/getUser获取用户/deleteUser删除用户 /editUser修改用户 /saveUser保存用户
      现在: /user GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户
      配置一个隐藏参数 名称为 _method 值为PUT
    • springboot需要配置一个参数才能使用底层提供的HiddenHttpMethodFilter,即需要手动开启spring:mvc:hiddenmethod:filter:enabled: true

    ②原理(表单提交用rest风格) 客户端方式,HTTP层直接为PUT,表单只能用get,post故需要filter

    • 表单提交带上_method=PUT
    • 请求过来被底层提供的HiddenHttpMethodFilter拦截
      • 如何拦截?
      • 先是拿到原生请求必须为post
      • 获取请求参数_method的值PUT(都转成大写)
      • 判断请求方式是否正确(那四种)
      • (也是原生request请求)包装模式的requestwrapper重写了getmethod方法(为当前传入的值),然后过滤器放行时用requestwrapper作为请求放行了

    ③小练习

    • 原来必须为_method 现在我要设置自定义
    • 原来spring中加入IOC会判断HiddenHttpMethodFilter是否有
    • 我们可以自己给IOC中配置HiddenHttpMethodFilter
      • new hiddenhttpmethodFilter()
      • .setMethodParam(‘myname’)

    3.2请求映射(如何找到哪个方法处理请求)

    • dispacherservlet的父类中重写dopost和doget,里面都间接调用了doservice
    • dispacherservlet重写了doservice里面又调用了dodispatch
    • springmvc分析从dodispatch方法开始分析
    • 传入request(得到请求路径)
    • 用mapperhandler来映射请求使用哪个handler处理(controller的方法)
    • mapperhandler中有handlermapping为处理器映射(有好几个)循环寻找哪个handlermapping保存的映射能处理当前请求
      • (默认配置)welcomepagehandlermapping 欢迎页的处理器映射
      • (默认配置)requestmappinghandlermapping:保存了所有@requestmapping和handler映射规则(自己写的 路径-controller的方法 在其中都有映射)
        • 此时找到请求的处理器handler(找到最佳匹配的处理器(可能有rest风格))
    • 我们也可以自己给容器中放handlermapping来自定义handlermapping
  • 相关阅读:
    使用hugging face开源库accelerate进行多GPU训练(单机多卡)时,在保存模型结构的时候出现的问题
    SQL 数据更新
    day7【代码随想录】移除链表元素
    人工智能、深度学习、机器学习常见面试题221~240
    AXI Quad SPI IP核配置详解
    vivo 短视频体验与成本优化实践
    echarts x轴数据旋转
    需求变更中,与利益相关者间5大沟通技巧
    石油化工行业商业供应链管理系统:标准化供应商管理,优化企业供应链采购流程
    用CSS实现一个扇形
  • 原文地址:https://blog.csdn.net/qq_44724899/article/details/127854729