-
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