web 开发
一 springmvc自动配置概览:内容协商视图解析器和beanname视图解析器,静态资源(webjars),自动注册converter,静态index.html页支持 定义favicon
二 简单功能分析
2.1静态资源访问:静态资源目录/static /resource /META-INF /resources(静态映射)()静态目录可修改。 静态资源访问前缀 webjar WebJars - Web Libraries in Jars http://localhost:8080/webjars/jquery/3.5.1/jquery.js
2.2 欢迎页支持(自己配置路径时,不可配置访问前缀,静态模式静态路径下的html)
2.3 自定义favicon(将favicon.ico放在静态资源目录下)
2.4 静态资源配置原理,。
只有一个有参构造器 有参构造器所以参数的值都会在容器中确定 资源处理默认规则 欢迎页的处理规则 favicon
三 请求参数处理
1请求映射(rest原理)所有映射都在handlermapping中
Springboot自动配置欢迎页的welcomepagehandlermapping,访问html
Springboot自动配置了默认的requestmappinghandlermapping
请求进来,挨个尝试所有的handlermapping看是否有请求信息
如果有就找到这个请求对应的handler
如果没有,下一个handlermapping
可以自己定义一些映射处理,也可以给自己的容器中放入handlermapping,自定义handler
2常用参数与基础注解
@PathVariable 路径变量
RequestHeader 获取请求头
RequestParam 获取请求参数
CookieValue 获取cookie值
RequestBody 获取请求体(post)
RequestAttribute 获取request域属性
MatrixVariable 矩阵变量
注释@ ,servlet API (webrequest servletrequest multipartrequest) 复杂参数(map errors model redirectattrbutes servletreponse) 自定义对象参数(可以自动类型转换与格式化,可以级联封装)
3 pojo封装过程 servletmodelattributemethodprocessor
4 参数处理原理
响应数据与内容协商
设置参数解析器:确定目标方法的每一个参数是什么,springmvc目标方法能写多少种参数类型,取决于参数解析器 (是否支持解析参数)
Servlet api参数解析
Model map原理
目标方法完成,将所有的数据都放在modelandviewcontainer,包含要去的页面地址view,还包含model数据
Webdatabinder=binderfactory.createbinder(webrequest,attribute,name);
Webdatabinder:web数据绑定器,将请求参数的值绑定到指定的javabean中
Webdatabinder利用它里面的converters将请求数据转成指定的数据类型,再次封装到Javabean中,genericconversationservice:在设置每一个值的时候,找它里面所有的converter,那个可以将这个数据类型(request)转换到指定类型,再次封装到javabean中
Genericconversationservice,在设置每一个值的时候,通过converter那个可以将数据类型转换到指定的类型(convert转换可)
Convert自定义封装名字(webconfig中写)
四 数据响应与内容协商
1响应json
引入依赖(json.jar +@responsebody) 返回值处理器判断是否支持这种类型返回值supportsreturntype 返回值处理器调用handlereturnvalue进行处理
HTTPmessageconverter原理
2内容协商
3开启浏览器参数方式内容协商功能 f12
为了方便内容协商,开启基于请求参数内容协商模式
Favor-parameter
4内容协商原理
判断当前响应头是否已经确定的媒体类型,mediatype
获取客户端(postman 浏览器)支持接收的内容(获取客户端accept请求字段)
遍历循环当前所有系统的messageconverter,看谁支持操作这个对象
找到支持操作person的converter 把converter支持的媒体类型处来
客户端需要application xml 服务端能力10
进行内容
5自定义messageconverter
Messageconverter合起来可以支持各种媒体类型数据操作(读写)
五 数据响应与内容协商
1视图解析Modelandview 视图解析器containnegotiationviewresolve
2 模板引擎Thymeleaf
3 thymeleaf的使用
4构建后台管理系统
六 拦截器
1handlerinterport接口
2 配置拦截器
3 拦截器原理
根据当前请求,找到handlerexecutechain(可以处理请求的handler以及handler的所有拦截器),先来顺序执行所有拦截器的preHandle方法,若返回值为true执行下一个拦截器,false直接倒叙执行所有已执行的aftercompletion 如果任何一个拦截器返回false,直接跳出不执行的目标方法,所有拦截器返回true,执行目标方法,倒叙执行所有拦截器的posthandle。前面的步骤有任何异常都会直接触发aftercompletion 页面渲染完成以后,也会触发aftercompletion
七 文件上传
页面表单 文件上传代码 自动配置原理
八 异常处理
异常处理步骤流程
- 执行目标方法,目标方法运行期间有任何异常会被catch、而且标志当前请求结束,并用dispatchexception
- 进入视图解析流程(页面渲染)processdispatchresult(processedrequest,reponse,mappedhandler,mv,dispatchexeccution
- Mv=processhandlerexception;处理handler发生的异常,处理完成返回modelandview
九 web原生主键注入(servlet,fliter)
Servletapi registerbean
十嵌入式servlet容器
切换嵌入式servlet容器 定制servlet容器
十一 定制化原理
常见方式 原理分析