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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值