[.small]#<<web.adoc#websocket-server, Same as in the Servlet stack>>#
[.small]#<<web.adoc#websocket-server, See equivalent in the Servlet stack>>#
The Spring Framework provides a WebSocket API that you can use to write client- and
server-side applications that handle WebSocket messages.
@ -21,7 +21,7 @@ server-side applications that handle WebSocket messages.
@@ -21,7 +21,7 @@ server-side applications that handle WebSocket messages.
[[webflux-websocket-server-handler]]
=== Server
[.small]#<<web.adoc#websocket-server-handler, Same as in the Servlet stack>>#
[.small]#<<web.adoc#websocket-server-handler, See equivalent in the Servlet stack>>#
To create a WebSocket server, you can first create a `WebSocketHandler`.
The following example shows how to do so:
@ -339,7 +339,7 @@ subsequently use `DataBufferUtils.release(dataBuffer)` when the buffers are cons
@@ -339,7 +339,7 @@ subsequently use `DataBufferUtils.release(dataBuffer)` when the buffers are cons
[[webflux-websocket-server-handshake]]
=== Handshake
[.small]#<<web.adoc#websocket-server-handshake, Same as in the Servlet stack>>#
[.small]#<<web.adoc#websocket-server-handshake, See equivalent in the Servlet stack>>#
`WebSocketHandlerAdapter` delegates to a `WebSocketService`. By default, that is an instance
of `HandshakeWebSocketService`, which performs basic checks on the WebSocket request and
@ -354,7 +354,7 @@ into the attributes of the `WebSocketSession`.
@@ -354,7 +354,7 @@ into the attributes of the `WebSocketSession`.
[[webflux-websocket-server-config]]
=== Server Configuration
[.small]#<<web.adoc#websocket-server-runtime-configuration, Same as in the Servlet stack>>#
[.small]#<<web.adoc#websocket-server-runtime-configuration, See equivalent in the Servlet stack>>#
The `RequestUpgradeStrategy` for each server exposes configuration specific to the
underlying WebSocket server engine. When using the WebFlux Java config you can customize
@ -408,7 +408,7 @@ only Tomcat and Jetty expose such options.
@@ -408,7 +408,7 @@ only Tomcat and Jetty expose such options.
[[webflux-websocket-server-cors]]
=== CORS
[.small]#<<web.adoc#websocket-server-allowed-origins, Same as in the Servlet stack>>#
[.small]#<<web.adoc#websocket-server-allowed-origins, See equivalent in the Servlet stack>>#
The easiest way to configure CORS and restrict access to a WebSocket endpoint is to
have your `WebSocketHandler` implement `CorsConfigurationSource` and return a
[.small]#<<web-reactive.adoc#webflux-cors-processing, See equivalent in the Reactive stack>>#
The CORS specification distinguishes between preflight, simple, and actual requests.
To learn how CORS works, you can read
@ -77,7 +77,7 @@ To learn more from the source or make advanced customizations, check the code be
@@ -77,7 +77,7 @@ To learn more from the source or make advanced customizations, check the code be
[.small]#<<web-reactive.adoc#webflux-cors-global, See equivalent in the Reactive stack>>#
In addition to fine-grained, controller method level configuration, you probably want to
define some global CORS configuration, too. You can set URL-based `CorsConfiguration`
@ -252,7 +252,7 @@ the `allowOriginPatterns` property may be used to match to a dynamic set of orig
@@ -252,7 +252,7 @@ the `allowOriginPatterns` property may be used to match to a dynamic set of orig
[.small]#<<web-reactive.adoc#webflux-fn-overview, See equivalent in the Reactive stack>>#
In WebMvc.fn, an HTTP request is handled with a `HandlerFunction`: a function that takes
`ServerRequest` and returns a `ServerResponse`.
@ -111,7 +111,7 @@ If you register the `RouterFunction` as a bean, for instance by exposing it in a
@@ -111,7 +111,7 @@ If you register the `RouterFunction` as a bean, for instance by exposing it in a
[.small]#<<web-reactive.adoc#webflux-fn-handler-functions, See equivalent in the Reactive stack>>#
`ServerRequest` and `ServerResponse` are immutable interfaces that offer JDK 8-friendly
access to the HTTP request and response, including headers, body, method, and status code.
@ -463,7 +463,7 @@ See <<core.adoc#validation-beanvalidation, Spring Validation>>.
@@ -463,7 +463,7 @@ See <<core.adoc#validation-beanvalidation, Spring Validation>>.
[.small]#<<web-reactive.adoc#webflux-fn-router-functions, See equivalent in the Reactive stack>>#
Router functions are used to route the requests to the corresponding `HandlerFunction`.
Typically, you do not write router functions yourself, but rather use a method on the
@ -672,7 +672,7 @@ We can further improve by using the `nest` method together with `accept`:
@@ -672,7 +672,7 @@ We can further improve by using the `nest` method together with `accept`:
[.small]#<<web-reactive.adoc#webflux-fn-running, See equivalent in the Reactive stack>>#
You typically run router functions in a <<web.adoc#mvc-servlet, `DispatcherHandler`>>-based setup through the
<<web.adoc#mvc-config>>, which uses Spring configuration to declare the
@ -765,7 +765,7 @@ The following example shows a WebFlux Java configuration:
@@ -765,7 +765,7 @@ The following example shows a WebFlux Java configuration:
[.small]#<<web-reactive.adoc#webflux-view, See equivalent in the Reactive stack>>#
The use of view technologies in Spring MVC is pluggable. Whether you decide to use
Thymeleaf, Groovy Markup Templates, JSPs, or other technologies is primarily a matter of
@ -14,7 +14,7 @@ the templates are editable by external sources, since this can have security imp
@@ -14,7 +14,7 @@ the templates are editable by external sources, since this can have security imp
[.small]#<<web-reactive.adoc#webflux-view-thymeleaf, See equivalent in the Reactive stack>>#
Thymeleaf is a modern server-side Java template engine that emphasizes natural HTML
templates that can be previewed in a browser by double-clicking, which is very helpful
@ -34,7 +34,7 @@ See https://www.thymeleaf.org/documentation.html[Thymeleaf+Spring] for more deta
@@ -34,7 +34,7 @@ See https://www.thymeleaf.org/documentation.html[Thymeleaf+Spring] for more deta
[.small]#<<web-reactive.adoc#webflux-view-freemarker, See equivalent in the Reactive stack>>#
https://freemarker.apache.org/[Apache FreeMarker] is a template engine for generating any
kind of text output from HTML to email and others. The Spring Framework has built-in
@ -44,7 +44,7 @@ integration for using Spring MVC with FreeMarker templates.
@@ -44,7 +44,7 @@ integration for using Spring MVC with FreeMarker templates.
[.small]#<<web-reactive.adoc#webflux-view-freemarker-contextconfig, See equivalent in the Reactive stack>>#
The following example shows how to configure FreeMarker as a view technology:
@ -125,7 +125,7 @@ returns a view name of `welcome`, the resolver looks for the
@@ -125,7 +125,7 @@ returns a view name of `welcome`, the resolver looks for the
[.small]#<<web-reactive.adoc#webflux-views-freemarker, See equivalent in the Reactive stack>>#
You can pass FreeMarker 'Settings' and 'SharedVariables' directly to the FreeMarker
`Configuration` object (which is managed by Spring) by setting the appropriate bean
@ -164,7 +164,7 @@ with additional convenience macros for generating form input elements themselves
@@ -164,7 +164,7 @@ with additional convenience macros for generating form input elements themselves
[.small]#<<web-reactive.adoc#webflux-view-bind-macros, See equivalent in the Reactive stack>>#
A standard set of macros are maintained within the `spring-webmvc.jar` file for
FreeMarker, so they are always available to a suitably configured application.
@ -576,7 +576,7 @@ syntax. The following example shows a sample template for an HTML page:
@@ -576,7 +576,7 @@ syntax. The following example shows a sample template for an HTML page:
[.small]#<<web-reactive.adoc#webflux-view-script, See equivalent in the Reactive stack>>#
The Spring Framework has a built-in integration for using Spring MVC with any
templating library that can run on top of the
@ -602,7 +602,7 @@ TIP: The basic rule for integrating any other script engine is that it must impl
@@ -602,7 +602,7 @@ TIP: The basic rule for integrating any other script engine is that it must impl
[.small]#<<web-reactive.adoc#webflux-view-script, See equivalent in the Reactive stack>>#
You can declare a `ScriptTemplateConfigurer` bean to specify the script engine to use,
the script files to load, what function to call to render templates, and so on.
@ -1965,7 +1965,7 @@ an external definition (by name) or as a `View` instance from the handler method
@@ -1965,7 +1965,7 @@ an external definition (by name) or as a `View` instance from the handler method
[.small]#<<web-reactive.adoc#webflux-dispatcher-handler, See equivalent in the Reactive stack>>#
Spring MVC, as many other web frameworks, is designed around the front controller
pattern where a central `Servlet`, the `DispatcherServlet`, provides a shared algorithm
@ -240,7 +240,7 @@ TIP: If an application context hierarchy is not required, applications may confi
@@ -240,7 +240,7 @@ TIP: If an application context hierarchy is not required, applications may confi
[.small]#<<web-reactive.adoc#webflux-special-bean-types, See equivalent in the Reactive stack>>#
The `DispatcherServlet` delegates to special beans to process requests and render the
appropriate responses. By "`special beans`" we mean Spring-managed `Object` instances that
@ -300,7 +300,7 @@ The following table lists the special beans detected by the `DispatcherServlet`:
@@ -300,7 +300,7 @@ The following table lists the special beans detected by the `DispatcherServlet`:
[.small]#<<web-reactive.adoc#webflux-dispatcher-handler-sequence, See equivalent in the Reactive stack>>#
The `DispatcherServlet` processes requests as follows:
@ -662,7 +662,7 @@ declare it as an <<mvc-ann-controller-advice>> bean or configure it directly on
@@ -662,7 +662,7 @@ declare it as an <<mvc-ann-controller-advice>> bean or configure it directly on
[.small]#<<web-reactive.adoc#webflux-dispatcher-exceptions, See equivalent in the Reactive stack>>#
If an exception occurs during request mapping or is thrown from a request handler (such as
a `@Controller`), the `DispatcherServlet` delegates to a chain of `HandlerExceptionResolver`
@ -773,7 +773,7 @@ however, use both a `WebApplicationInitializer` and a minimal `web.xml`.
@@ -773,7 +773,7 @@ however, use both a `WebApplicationInitializer` and a minimal `web.xml`.
[.small]#<<web-reactive.adoc#webflux-viewresolution, See equivalent in the Reactive stack>>#
Spring MVC defines the `ViewResolver` and `View` interfaces that let you render
models in a browser without tying you to a specific view technology. `ViewResolver`
@ -825,7 +825,7 @@ The following table provides more details on the `ViewResolver` hierarchy:
@@ -825,7 +825,7 @@ The following table provides more details on the `ViewResolver` hierarchy:
[.small]#<<web-reactive.adoc#webflux-redirecting-redirect-prefix, See equivalent in the Reactive stack>>#
The special `redirect:` prefix in a view name lets you perform a redirect. The
`UrlBasedViewResolver` (and its subclasses) recognize this as an instruction that a
@ -876,7 +876,7 @@ Servlet/JSP engine. Note that you may also chain multiple view resolvers, instea
@@ -876,7 +876,7 @@ Servlet/JSP engine. Note that you may also chain multiple view resolvers, instea
[.small]#<<web-reactive.adoc#webflux-filters, See equivalent in the Reactive stack>>#
The `spring-web` module provides some useful filters:
@ -1321,7 +1321,7 @@ available through the `ServletRequest.getParameter{asterisk}()` family of method
@@ -1321,7 +1321,7 @@ available through the `ServletRequest.getParameter{asterisk}()` family of method
[.small]#<<web-reactive.adoc#webflux-forwarded-headers, See equivalent in the Reactive stack>>#
As a request goes through proxies (such as load balancers) the host, port, and
scheme may change, and that makes it a challenge to create links that point to the correct
@ -1382,7 +1382,7 @@ the filter via `web.xml` or in Spring Boot via a `FilterRegistrationBean` be sur
@@ -1382,7 +1382,7 @@ the filter via `web.xml` or in Spring Boot via a `FilterRegistrationBean` be sur
[.small]#<<web-reactive.adoc#webflux-filters-cors, See equivalent in the Reactive stack>>#
Spring MVC provides fine-grained support for CORS configuration through annotations on
controllers. However, when used with Spring Security, we advise relying on the built-in
@ -1395,7 +1395,7 @@ See the sections on <<mvc-cors>> and the <<mvc-cors-filter>> for more details.
@@ -1395,7 +1395,7 @@ See the sections on <<mvc-cors>> and the <<mvc-cors-filter>> for more details.
[.small]#<<web-reactive.adoc#webflux-ann-controller, See equivalent in the Reactive stack>>#
You can define controller beans by using a standard Spring bean definition in the
Servlet's `WebApplicationContext`. The `@Controller` stereotype allows for auto-detection,
@ -1504,7 +1504,7 @@ directly to the response body versus view resolution and rendering with an HTML
@@ -1504,7 +1504,7 @@ directly to the response body versus view resolution and rendering with an HTML
[.small]#<<web-reactive.adoc#webflux-ann-requestmapping-proxying, See equivalent in the Reactive stack>>#
In some cases, you may need to decorate a controller with an AOP proxy at runtime.
One example is if you choose to have `@Transactional` annotations directly on the
@ -1526,7 +1526,7 @@ Please, enable class based proxying, or otherwise the interface must also have a
@@ -1526,7 +1526,7 @@ Please, enable class based proxying, or otherwise the interface must also have a
[.small]#<<web-reactive.adoc#webflux-ann-requestmapping, See equivalent in the Reactive stack>>#
You can use the `@RequestMapping` annotation to map requests to controllers methods. It has
various attributes to match by URL, HTTP method, request parameters, headers, and media
@ -1591,7 +1591,7 @@ The following example has type and method level mappings:
@@ -1591,7 +1591,7 @@ The following example has type and method level mappings:
[.small]#<<web-reactive.adoc#webflux-ann-requestmapping-consumes, See equivalent in the Reactive stack>>#
You can narrow the request mapping based on the `Content-Type` of the request,
as the following example shows:
@ -1832,7 +1832,7 @@ TIP: `MediaType` provides constants for commonly used media types, such as
@@ -1832,7 +1832,7 @@ TIP: `MediaType` provides constants for commonly used media types, such as
[.small]#<<web-reactive.adoc#webflux-ann-requestmapping-produces, See equivalent in the Reactive stack>>#
You can narrow the request mapping based on the `Accept` request header and the list of
content types that a controller method produces, as the following example shows:
@ -1872,7 +1872,7 @@ TIP: `MediaType` provides constants for commonly used media types, such as
@@ -1872,7 +1872,7 @@ TIP: `MediaType` provides constants for commonly used media types, such as
[.small]#<<web-reactive.adoc#mvc-ann-requestmapping-head-options, See equivalent in the Reactive stack>>#
Spring MVC supports the use of <<core.adoc#beans-meta-annotations, composed annotations>>
for request mapping. Those are annotations that are themselves meta-annotated with
@ -1974,7 +1974,7 @@ you can check the custom attribute and return your own `RequestCondition`.
@@ -1974,7 +1974,7 @@ you can check the custom attribute and return your own `RequestCondition`.
[.small]#<<web-reactive.adoc#webflux-ann-requestmapping-registration, See equivalent in the Reactive stack>>#
You can programmatically register handler methods, which you can use for dynamic
registrations or for advanced cases, such as different instances of the same handler
@ -2027,7 +2027,7 @@ under different URLs. The following example registers a handler method:
@@ -2027,7 +2027,7 @@ under different URLs. The following example registers a handler method:
[.small]#<<web-reactive.adoc#webflux-ann-typeconversion, See equivalent in the Reactive stack>>#
Some annotated controller method arguments that represent `String`-based request input (such as
`@RequestParam`, `@RequestHeader`, `@PathVariable`, `@MatrixVariable`, and `@CookieValue`)
@ -2313,7 +2313,7 @@ an empty original value, so the corresponding `Missing...Exception` variants wil
@@ -2313,7 +2313,7 @@ an empty original value, so the corresponding `Missing...Exception` variants wil
[.small]#<<web-reactive.adoc#webflux-ann-matrix-variables, See equivalent in the Reactive stack>>#
https://tools.ietf.org/html/rfc3986#section-3.3[RFC 3986] discusses name-value pairs in
path segments. In Spring MVC, we refer to those as "`matrix variables`" based on an
@ -2453,7 +2453,7 @@ you need to set a `UrlPathHelper` with `removeSemicolonContent=false` through
@@ -2453,7 +2453,7 @@ you need to set a `UrlPathHelper` with `removeSemicolonContent=false` through
[.small]#<<web-reactive.adoc#webflux-ann-requestheader, See equivalent in the Reactive stack>>#
You can use the `@RequestHeader` annotation to bind a request header to a method argument in a
controller.
@ -2590,7 +2590,7 @@ example, a method parameter annotated with `@RequestHeader("Accept")` can be of
@@ -2590,7 +2590,7 @@ example, a method parameter annotated with `@RequestHeader("Accept")` can be of
[.small]#<<web-reactive.adoc#webflux-ann-sessionattribute, See equivalent in the Reactive stack>>#
If you need access to pre-existing session attributes that are managed globally
(that is, outside the controller -- for example, by a filter) and may or may not be present,
@ -2945,7 +2945,7 @@ workflow, consider using `@SessionAttributes` as described in
@@ -2945,7 +2945,7 @@ workflow, consider using `@SessionAttributes` as described in
[.small]#<<web-reactive.adoc#webflux-ann-requestattrib, See equivalent in the Reactive stack>>#
Similar to `@SessionAttribute`, you can use the `@RequestAttribute` annotations to
access pre-existing request attributes created earlier (for example, by a Servlet `Filter`
@ -3072,7 +3072,7 @@ Therefore, we recommend that you use flash attributes mainly for redirect scenar
@@ -3072,7 +3072,7 @@ Therefore, we recommend that you use flash attributes mainly for redirect scenar
[.small]#<<web-reactive.adoc#webflux-ann-httpentity, See equivalent in the Reactive stack>>#
`HttpEntity` is more or less identical to using <<mvc-ann-requestbody>> but is based on a
container object that exposes request headers and body. The following listing shows an example:
@ -3337,7 +3337,7 @@ container object that exposes request headers and body. The following listing sh
@@ -3337,7 +3337,7 @@ container object that exposes request headers and body. The following listing sh
[.small]#<<web-reactive.adoc#webflux-ann-modelattrib-methods, See equivalent in the Reactive stack>>#
You can use the `@ModelAttribute` annotation:
@ -3661,7 +3661,7 @@ unless the return value is a `String` that would otherwise be interpreted as a v
@@ -3661,7 +3661,7 @@ unless the return value is a `String` that would otherwise be interpreted as a v
[.small]#<<web-reactive.adoc#webflux-ann-initbinder, See equivalent in the Reactive stack>>#
`@Controller` or `@ControllerAdvice` classes can have `@InitBinder` methods that
initialize instances of `WebDataBinder`, and those, in turn, can:
@ -3755,14 +3755,14 @@ controller-specific `Formatter` implementations, as the following example shows:
@@ -3755,14 +3755,14 @@ controller-specific `Formatter` implementations, as the following example shows:
[.small]#<<web-reactive.adoc#webflux-uri-building, See equivalent in the Reactive stack>>#
This section describes various options available in the Spring Framework to work with URI's.
@ -4562,7 +4562,7 @@ Finally, from a configuration perspective the asynchronous request processing fe
@@ -4562,7 +4562,7 @@ Finally, from a configuration perspective the asynchronous request processing fe
[.small]#<<web-reactive.adoc#webflux-ann-rest-exceptions, See equivalent in the Reactive stack>>#
A common requirement for REST services is to include details in the body of error
responses. The Spring Framework supports the "Problem Details for HTTP APIs"
@ -4880,7 +4880,7 @@ and any `ErrorResponseException`, and renders an error response with a body.
@@ -4880,7 +4880,7 @@ and any `ErrorResponseException`, and renders an error response with a body.
[.small]#<<web-reactive.adoc#webflux-ann-rest-exceptions-render, See equivalent in the Reactive stack>>#
You can return `ProblemDetail` or `ErrorResponse` from any `@ExceptionHandler` or from
any `@RequestMapping` method to render an RFC 7807 response. This is processed as follows:
@ -4903,7 +4903,7 @@ use a protected method to map any exception to a `ProblemDetail`.
@@ -4903,7 +4903,7 @@ use a protected method to map any exception to a `ProblemDetail`.
[.small]#<<web-reactive.adoc#webflux-ann-rest-exceptions-non-standard, See equivalent in the Reactive stack>>#
You can extend an RFC 7807 response with non-standard fields in one of two ways.
@ -4923,7 +4923,7 @@ from an existing `ProblemDetail`. This could be done centrally, e.g. from an
@@ -4923,7 +4923,7 @@ from an existing `ProblemDetail`. This could be done centrally, e.g. from an
[.small]#<<web-reactive.adoc#webflux-ann-rest-exceptions-client, See equivalent in the Reactive stack>>#
A client application can catch `WebClientResponseException`, when using the `WebClient`,
or `RestClientResponseException` when using the `RestTemplate`, and use their
@ -5044,7 +5044,7 @@ or `RestClientResponseException` when using the `RestTemplate`, and use their
@@ -5044,7 +5044,7 @@ or `RestClientResponseException` when using the `RestTemplate`, and use their
[.small]#<<web-reactive.adoc#webflux-web-security, See equivalent in the Reactive stack>>#
The https://spring.io/projects/spring-security[Spring Security] project provides support
for protecting web applications from malicious exploits. See the Spring Security
@ -5062,7 +5062,7 @@ https://hdiv.org/[HDIV] is another web security framework that integrates with S
@@ -5062,7 +5062,7 @@ https://hdiv.org/[HDIV] is another web security framework that integrates with S
[.small]#<<web-reactive.adoc#webflux-caching, See equivalent in the Reactive stack>>#
HTTP caching can significantly improve the performance of a web application. HTTP caching
revolves around the `Cache-Control` response header and, subsequently, conditional request
@ -5078,7 +5078,7 @@ This section describes the HTTP caching-related options that are available in Sp
@@ -5078,7 +5078,7 @@ This section describes the HTTP caching-related options that are available in Sp
[.small]#<<web-reactive.adoc#webflux-config-enable, See equivalent in the Reactive stack>>#
In Java configuration, you can use the `@EnableWebMvc` annotation to enable MVC
configuration, as the following example shows:
@ -5320,7 +5320,7 @@ available on the classpath (for example, payload converters for JSON, XML, and o
@@ -5320,7 +5320,7 @@ available on the classpath (for example, payload converters for JSON, XML, and o
[.small]#<<web-reactive.adoc#webflux-config-content-negotiation, See equivalent in the Reactive stack>>#
You can configure how Spring MVC determines the requested media types from the request
(for example, `Accept` header, URL path extension, query parameter, and others).
@ -5685,7 +5685,7 @@ The following example shows how to achieve the same configuration in XML:
@@ -5685,7 +5685,7 @@ The following example shows how to achieve the same configuration in XML:
@ -5838,7 +5838,7 @@ splitting URL handling across an annotated controller and a view controller.
@@ -5838,7 +5838,7 @@ splitting URL handling across an annotated controller and a view controller.
@ -6196,7 +6196,7 @@ The following example shows how to achieve the same configuration in XML:
@@ -6196,7 +6196,7 @@ The following example shows how to achieve the same configuration in XML:
[.small]#<<web-reactive.adoc#webflux-config-path-matching, See equivalent in the Reactive stack>>#
You can customize options related to path matching and treatment of the URL.
For details on the individual options, see the
@ -6256,7 +6256,7 @@ The following example shows how to customize path matching in XML configuration:
@@ -6256,7 +6256,7 @@ The following example shows how to customize path matching in XML configuration:
@ -6331,7 +6331,7 @@ by letting it be detected through a `<component-scan/>` declaration.
@@ -6331,7 +6331,7 @@ by letting it be detected through a `<component-scan/>` declaration.
[.small]#<<web-reactive.adoc#webflux-websocket-server-handler, See equivalent in the Reactive stack>>#
Creating a WebSocket server is as simple as implementing `WebSocketHandler` or, more
likely, extending either `TextWebSocketHandler` or `BinaryWebSocketHandler`. The following
@ -108,7 +108,7 @@ sending. One option is to wrap the `WebSocketSession` with
@@ -108,7 +108,7 @@ sending. One option is to wrap the `WebSocketSession` with
[.small]#<<web-reactive.adoc#webflux-websocket-server-handshake, See equivalent in the Reactive stack>>#
The easiest way to customize the initial HTTP WebSocket handshake request is through
a `HandshakeInterceptor`, which exposes methods for "`before`" and "`after`" the handshake.
@ -242,7 +242,7 @@ Java initialization API. The following example shows how to do so:
@@ -242,7 +242,7 @@ Java initialization API. The following example shows how to do so:
[.small]#<<web-reactive.adoc#webflux-websocket-server-config, See equivalent in the Reactive stack>>#
Each underlying WebSocket engine exposes configuration properties that control
runtime characteristics, such as the size of message buffer sizes, idle timeout,
@ -365,7 +365,7 @@ The following example shows the XML configuration equivalent of the preceding ex
@@ -365,7 +365,7 @@ The following example shows the XML configuration equivalent of the preceding ex