spring web模块, 为响应式应用提供以下的支持:
对于服务端请求处理, 两个不同层级的支持:
HttpHandler, 低层请求处理的非阻塞, back pressure接口。 还有相应的netty, servlet的适应器。
WebHandler api, 基于httphandler的高层通用的接口。
对于客户端处理,基础的 clientHttpConnector接口来发送请求
对于客户端和服务端, codec用来序列化响应和反序列化请求
2.1 HttpHandler
Httphandler只有一个方法来处理请求和响应。 它的唯一目标是提供一层在netty等server api之上的抽象.
2.2 webHandler
webhandler是构建在httphandler抽象上的一套接口, 通过多个webfilter, 多个webexceptionfilter, 一个webhandler提供一套通用的http 请求处理方案。 这些组件可以通过webhttphandlercontext组装, 只要把他们放到同一个applicationcontext里 他们就会自动组装起来, 当然也可以主动配置。
webhandler的目标是提供一套通用的web http api, 包括但不限如下特性:
session属性访问
请求属性访问
解析formdata
为multidata提供一套访问api
可以被builder自动检测的bean:
webexceptionhandler, webhandler, webgilter, sessionmanager,
lacalecontextresolver, servercodecconfigiuer,
forwardheadertransformer
可以接受formdata, multipart等类型的请求体. 可以对ForwardHeaders进行处理forwardheaders.
2.3 WebFilter
webfilter, 在请求被处理前和请求被处理后实现横切逻辑. @Order注解可以指定filter的顺序.
另外, 还有内建的CorsFilter, 这个相对于spring security提供的相同类型的filter, 被官方更加推荐使用.
2.4 异常处理
webExceptionHanndler, 可用用来处理,@Order注解可以指定优先级.
两个默认实现:
ResponseStatusExceptionHandler
WebFluxResponseStatusExceptionHandler