当前位置: 首页 > news >正文

主办单位性质与网站名称不符建站宝盒源码

主办单位性质与网站名称不符,建站宝盒源码,网站开发 -(广告),河北企业建站系统信息WebFlux的工作流程 在WebFlux中#xff0c;主要的组件包括#xff1a; Reactor: Reactor是WebFlux底层使用的响应式编程库#xff0c;提供了Mono和Flux这两种响应式类型#xff0c;分别用于表示0-1个和0-N个异步序列元素。WebHandler: 是处理请求的核心接口#xff0c;所…WebFlux的工作流程 在WebFlux中主要的组件包括 Reactor: Reactor是WebFlux底层使用的响应式编程库提供了Mono和Flux这两种响应式类型分别用于表示0-1个和0-N个异步序列元素。WebHandler: 是处理请求的核心接口所有的请求都会被分配给一个WebHandler来处理。HandlerMapping: 用于将请求映射到对应的WebHandler。HandlerAdapter: 用于适配WebHandler的执行使其能够处理请求并返回响应。WebFilter: 类似于Servlet中的Filter可以在请求处理前后进行拦截和处理。ServerResponse和ServerRequest: 分别代表HTTP的响应和请求在WebFlux中用于处理非阻塞的请求和响应。RouterFunction: 用于声明式地定义路由规则将请求映射到处理器函数。 工作流程图 #mermaid-svg-3Zrkvn45iOLWfh9L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .error-icon{fill:#552222;}#mermaid-svg-3Zrkvn45iOLWfh9L .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3Zrkvn45iOLWfh9L .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3Zrkvn45iOLWfh9L .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3Zrkvn45iOLWfh9L .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3Zrkvn45iOLWfh9L .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3Zrkvn45iOLWfh9L .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3Zrkvn45iOLWfh9L .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3Zrkvn45iOLWfh9L .marker.cross{stroke:#333333;}#mermaid-svg-3Zrkvn45iOLWfh9L svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3Zrkvn45iOLWfh9L .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .cluster-label text{fill:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .cluster-label span{color:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .label text,#mermaid-svg-3Zrkvn45iOLWfh9L span{fill:#333;color:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .node rect,#mermaid-svg-3Zrkvn45iOLWfh9L .node circle,#mermaid-svg-3Zrkvn45iOLWfh9L .node ellipse,#mermaid-svg-3Zrkvn45iOLWfh9L .node polygon,#mermaid-svg-3Zrkvn45iOLWfh9L .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3Zrkvn45iOLWfh9L .node .label{text-align:center;}#mermaid-svg-3Zrkvn45iOLWfh9L .node.clickable{cursor:pointer;}#mermaid-svg-3Zrkvn45iOLWfh9L .arrowheadPath{fill:#333333;}#mermaid-svg-3Zrkvn45iOLWfh9L .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3Zrkvn45iOLWfh9L .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3Zrkvn45iOLWfh9L .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3Zrkvn45iOLWfh9L .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3Zrkvn45iOLWfh9L .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3Zrkvn45iOLWfh9L .cluster text{fill:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L .cluster span{color:#333;}#mermaid-svg-3Zrkvn45iOLWfh9L div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3Zrkvn45iOLWfh9L :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Request Dispatch Map to Filter Process Response Return Use Async Processing Client Server HandlerMapping WebHandler WebFilter HandlerAdapter ServerResponse Reactor 在这个流程中 客户端发送请求到服务器。服务器接收到请求并将其分发给HandlerMapping。HandlerMapping根据请求信息将其映射到对应的WebHandler。WebFilter可以在请求到达WebHandler之前或之后进行拦截和处理。WebHandler处理请求可能会使用Reactor库中的Mono或Flux进行异步处理。HandlerAdapter将WebHandler的处理结果适配成服务器可以发送的响应。ServerResponse将响应返回给客户端。 WebFlux核心API 1. HttpHandler与HttpServer HttpHandler HttpHandler是WebFlux中处理HTTP请求的核心接口之一。它代表一个能够处理HTTP请求并生成响应的组件。HttpHandler可以被看作是一个函数接受一个HTTP请求并返回一个表示HTTP响应的Publisher。典型的HttpHandler可以是一个Lambda表达式或一个实现了接口的类。可用于 Reactor Netty 的适配器 Undertow、Tomcat、Jetty 和任何 Servlet 容器。 HttpServer HttpServer是Reactor Netty提供的一个用于构建HTTP服务器的类。它允许你配置服务器的主机名、端口、SSL支持等信息。 public class SimpleHttpHandlerServerExample {public static void main(String[] args) throws IOException {HttpHandler httpHandler RouterFunctions.toHttpHandler(RouterFunctions.route().GET(/hello, request - ServerResponse.ok().bodyValue(Hello, WebFlux!)).build());ReactorHttpHandlerAdapter adapter new ReactorHttpHandlerAdapter(httpHandler);//启动Netty服务器HttpServer.create().host(localhost).port(8080).handle(adapter) //用指定的处理器处理请求.bindNow(); //现在就绑定System.out.println(服务器启动完成....监听8080接受请求);System.in.read();System.out.println(服务器停止....);} }测试 GET http://localhost:8080/hello 响应Hello, WebFlux! 2. DispatcherHandler 前中讲到WebFlux的工作流程第5步中WebHandler用于处理请求 在 Spring WebFlux 中DispatcherHandler 实现了 WebHandler 接口因此 DispatcherHandler 是 WebHandler 的一种具体实现。 WebHandler 接口定义了处理 HTTP 请求的方法而 DispatcherHandler 实现了这个接口提供了处理请求的具体实现。 WebHandler 接口的主要方法是 handle用于处理 HTTP 请求。DispatcherHandler 通过实现这个接口提供了对请求的分发和处理的支持。下面是 WebHandler 接口的声明 public interface WebHandler {MonoVoid handle(ServerWebExchange exchange); }而 DispatcherHandler 通过实现 WebHandler 接口定义了处理请求的具体逻辑。在 DispatcherHandler 中handle 方法被实现为请求的分发和处理如代码所示。 Override public MonoVoid handle(ServerWebExchange exchange) {// 如果 handlerMappings 为 null返回一个包含错误信息的 Monoif (this.handlerMappings null) {return createNotFoundError();}// 如果是预检请求CORS pre-flight request处理预检请求if (CorsUtils.isPreFlightRequest(exchange.getRequest())) {return handlePreFlight(exchange);}// 从 handlerMappings 中获取处理器函数return Flux.fromIterable(this.handlerMappings)// 依次尝试每个 HandlerMapping获取处理器函数是开发者编写的处理器函数Controller中的接口也是工作流程中第3步.concatMap(mapping - mapping.getHandler(exchange)) // 取第一个非空的处理器函数如果都为空则返回 createNotFoundError.next()// 如果获取处理器函数失败也返回 createNotFoundError.switchIfEmpty(createNotFoundError())// 处理可能发生的错误比如处理器函数执行时的异常.onErrorResume(ex - handleDispatchError(exchange, ex))// 处理请求传递 ServerWebExchange 和处理器函数.flatMap(handler - handleRequestWith(exchange, handler)); } 所以DispatcherHandler 是 WebHandler 的一种实现用于实现对请求的分发和处理。在 Spring WebFlux 中DispatcherHandler 是整个请求处理流程的核心组件之一。 WebFlux常用API RouterFunctions RouterFunctions 是用于定义路由的主要接口。通过它你可以定义请求的映射和处理。 Configuration public class MyRouterConfig {Beanpublic RouterFunctionServerResponse myRoutes(MyHandler handler) {return RouterFunctions.route(GET(/api/resource/{id}), handler::handleResource).andRoute(POST(/api/resource), handler::createResource);} }HandlerFunction HandlerFunction 用于处理请求并返回响应。你需要为每个路由定义一个处理函数。 Component public class MyHandler {public MonoServerResponse handleResource(ServerRequest request) {// 处理 GET 请求逻辑// 返回 MonoServerResponseString resourceId request.pathVariable(id);WebClient webClient WebClient.create(http://localhost:8080);webClient.get().uri(/api/resource/{id}, 123).retrieve().bodyToMono(String.class).subscribe(response - System.out.println(Response: response));// 处理逻辑return ServerResponse.ok().bodyValue(Resource ID: resourceId);}public MonoServerResponse createResource(ServerRequest request) {// 处理 POST 请求逻辑// 返回 MonoServerResponsereturn Mono.just(Hello, WebFlux!).flatMap(response - ServerResponse.ok().bodyValue(response));} }ServerRequest 和 ServerResponse ServerRequest 表示一个 HTTP 请求而 ServerResponse 表示一个 HTTP 响应。在处理函数中你可以通过这两个对象来获取请求信息和构建响应。 public MonoServerResponse handleResource(ServerRequest request) {// 处理 GET 请求逻辑// 返回 MonoServerResponseString resourceId request.pathVariable(id);WebClient webClient WebClient.create(http://localhost:8080);webClient.get().uri(/api/resource/{id}, 123).retrieve().bodyToMono(String.class).subscribe(response - System.out.println(Response: response));// 处理逻辑return ServerResponse.ok().bodyValue(Resource ID: resourceId);}Mono 和 Flux Mono 和 Flux 是 Reactor 框架中的概念但在 Spring WebFlux 中也经常用到。Mono 用于表示包含零个或一个元素的异步序列而 Flux 用于表示包含零个或多个元素的异步序列。 public MonoServerResponse createResource(ServerRequest request) {// 处理 POST 请求逻辑// 返回 MonoServerResponsereturn Mono.just(Hello, WebFlux!).flatMap(response - ServerResponse.ok().bodyValue(response));}WebClient WebClient 是 Spring WebFlux 提供的用于进行 HTTP 请求的客户端。它支持异步和响应式编程。 public MonoServerResponse handleResource(ServerRequest request) {// 处理 GET 请求逻辑// 返回 MonoServerResponseString resourceId request.pathVariable(id);WebClient webClient WebClient.create(http://localhost:8080);webClient.get().uri(/api/resource/{id}, 123).retrieve().bodyToMono(String.class).subscribe(response - System.out.println(Response: response));// 处理逻辑return ServerResponse.ok().bodyValue(Resource ID: resourceId);}MediaType 和 Content-Type MediaType 类用于表示媒体类型而 Content-Type 则是 HTTP 请求和响应中用于指定实体主体的媒体类型。 public MonoServerResponse handleResource(ServerRequest request) {return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).bodyValue({ \message\: \Hello, WebFlux!\ }); }ExceptionHandler ExceptionHandler 用于全局处理异常你可以通过实现 WebExceptionHandler 接口来自定义异常处理逻辑。 Component Order(-2) // 定义处理器的顺序 public class GlobalExceptionHandler implements WebExceptionHandler {Overridepublic MonoVoid handle(ServerWebExchange exchange, Throwable ex) {// 处理其他异常exchange.getResponse().setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);return exchange.getResponse().setComplete();} }学习打卡day09响应式编程WebFlux基础API
http://www.pierceye.com/news/689990/

相关文章:

  • 中山企业手机网站建设设计方案翻译
  • 江苏省品牌专业群建设专题网站wordpress 返利 插件
  • 建设部网站官网设计排版网站
  • 企业网站建设应避免数据孤岛网站建设费入何科目
  • wordpress数据量大网站访问石家庄网站建设招商
  • 公司核名在哪个网站免费申请无限流量卡
  • 做网站和网页的目的和作用是什么山西2地又检出阳性
  • 自助网站建设推广优化策略wordpress中文采集插件
  • 网站开发及运营成本做网站 公司 个体
  • 永久免费建站地址苏州h5网站建设价钱
  • 室内设计网站网站建设中请稍后再访问
  • 十堰网站开发培训编程软件手机
  • 南京网站优化推广微网站缺点
  • 大连零基础网站建设培训哪里有固安县建设局网站
  • 怎么制作网站首页培训心得体会总结简短
  • 商务网站建设 模板长春高端品牌网站建设
  • 做网站比较便宜办公资源网
  • 公司怎么做网页网站遵义网站设计公司
  • 网站建设毕业设计yy直播回放
  • 响应式网站有哪些2017淮南网络推广报价
  • 兰州公司网站建设网站建设筹备方案
  • 租房网站建设做一个跨境电商网站
  • 网站设计制作过程容桂做pc端网站
  • 宜昌市上海中学官网seo文章外包
  • 加强普法网站建设的通知制作婚恋网站
  • 北大荒建设集团有限公司网站网站添加在线qq聊天
  • 网站首页被k咋办上海市企业服务云登录
  • 长安镇网站建设公司大网站制作公司
  • 衡水做网站推广找谁廊坊百度推广排名优化
  • 网站建设毕业报告wordpress微信登录页面