环境:Springboot2.4.12,spring–web模块包含了对响应式web应用程序的以下基本支持:,HttpHandler是一个简单的协议,只有一个方法来处理请求和响应。它故意最小化,其主要和唯一的目的是在不同的HTTP服务器api上提供最小的抽象。,支持的服务器api如下表所示:,下表描述了服务器依赖关系:,下面的代码片段显示了在每个服务器API中使用HttpHandler适配器:,要将war部署到任何Servlet 3.1+容器,你可以扩展并在war中包含
AbstractReactiveWebInitializer。这个类用ServletHttpHandlerAdapter封装了一个HttpHandler,并将其注册为Servlet。,部分源码:,org.springframework.web.server包构建在HttpHandler契约之上,为通过多个WebExceptionHandler、多个WebFilter和单个WebHandler组件的链处理请求提供通用的web API。只需指向自动检测组件的Spring ApplicationContext,或者向构建器注册组件,就可以将该链与WebHttpHandlerBuilder组合在一起。,HttpHandler的目标很简单,就是抽象出不同的HTTP服务器,而WebHandler API的目标是提供web应用中常用的更广泛的功能,例如:,特殊bean类型,下表列出了WebHttpHandlerBuilder可以在Spring ApplicationContext中自动检测或直接注册的组件:,Form Data,ServerWebExchange公开了以下访问表单数据的方法:,DefaultServerWebExchange使用配置的HttpMessageReader将表单数据(
application/x-www-form-urlencoded)解析为MultiValueMap。默认情况下,FormHttpMessageReader被配置为由ServerCodecConfigurer bean使用。,Multipart Data,ServerWebExchange公开了以下访问多部分数据的方法:,DefaultServerWebExchange使用配置的HttpMessageReader<MultiValueMap<String, Part>>来将multipart/form-data内容解析为MultiValueMap。默认情况下,这是DefaultPartHttpMessageReader,它没有任何第三方依赖。另外,还可以使用基于Synchronoss nio Multipart库的SynchronossPartHttpMessageReader。两者都是通过ServerCodecConfigurer bean进行配置的。,要以流式方式解析多部分数据,你可以使用HttpMessageReader<Part>返回的` Flux<Part> `。例如,在带注释的控制器中,使用@RequestPart意味着通过名称访问各个部分,就像map一样,因此需要完整解析多个部分的数据。相比之下,可以使用@RequestBody将内容解码到Flux<Part>,而无需收集到MultiValueMap。,在WebHandler API中,你可以使用WebFilter在过滤器和目标WebHandler处理链的其余部分之前和之后应用拦截风格的逻辑。当使用WebFlux配置时,注册WebFilter就像把它声明为Spring bean一样简单,并且(可选地)通过在bean声明上使用@Order或实现Ordered来表示优先级。,在WebHandler API中,可以使用WebExceptionHandler来处理来自WebFilter实例链和目标WebHandler的异常。当使用WebFlux配置时,注册WebExceptionHandler就像声明它为Spring bean一样简单,并且(可选)通过在bean声明上使用@Order或实现Ordered来表示优先级。,下表描述了可用的WebExceptionHandler实现:,spring-web和spring-core模块通过非阻塞I/O提供响应式流回压,支持序列化和反序列化与高层对象之间的字节内容。下面介绍这种支持:,spring-core模块提供了byte[]、ByteBuffer、DataBuffer、Resource和String编码器和解码器的实现。spring-web模块提供了Jackson JSON、Jackson Smile、JAXB2、Protocol buffer和其他Encoder和Decoder,以及针对表单数据、多部分内容、服务器发送事件等只支持web的HTTP消息阅读器和writer实现。
© 版权声明
文章版权归作者所有,未经允许请勿转载。