From 7b0ba0188f1d4ba6bf75a8e6e318bfb433dbdc43 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 20 Apr 2023 09:51:32 -0500 Subject: [PATCH] Structural Fixes --- framework-docs/modules/ROOT/nav.adoc | 91 ++++++++++--------- .../modules/ROOT/pages/data-access/oxm.adoc | 3 - .../pages/languages/kotlin/coroutines.adoc | 2 +- .../modules/ROOT/pages/web-reactive.adoc | 62 ------------- .../web/webflux-http-interface-client.adoc | 10 ++ .../pages/web/webflux-reactive-libraries.adoc | 29 ++++++ .../modules/ROOT/pages/web/webflux-test.adoc | 12 +++ .../ROOT/pages/web/webflux-websocket.adoc | 4 +- .../ROOT/pages/web/webflux/caching.adoc | 4 - .../web/webflux/controller/ann-advice.adoc | 5 - .../webflux/controller/ann-initbinder.adoc | 2 - .../ROOT/pages/web/webflux/uri-building.adoc | 4 +- .../ROOT/pages/web/webmvc/mvc-ann-async.adoc | 4 - .../ROOT/pages/web/webmvc/mvc-caching.adoc | 5 - .../web/webmvc/mvc-controller/ann-advice.adoc | 1 - .../webmvc/mvc-controller/ann-initbinder.adoc | 2 +- .../pages/web/webmvc/mvc-uri-building.adoc | 2 +- .../modules/ROOT/pages/web/websocket.adoc | 3 +- .../web/web-data-binding-model-design.adoc | 0 .../{pages => partials}/web/web-uris.adoc | 0 .../web/websocket-intro.adoc | 0 21 files changed, 103 insertions(+), 142 deletions(-) create mode 100644 framework-docs/modules/ROOT/pages/web/webflux-http-interface-client.adoc create mode 100644 framework-docs/modules/ROOT/pages/web/webflux-reactive-libraries.adoc create mode 100644 framework-docs/modules/ROOT/pages/web/webflux-test.adoc rename framework-docs/modules/ROOT/{pages => partials}/web/web-data-binding-model-design.adoc (100%) rename framework-docs/modules/ROOT/{pages => partials}/web/web-uris.adoc (100%) rename framework-docs/modules/ROOT/{pages => partials}/web/websocket-intro.adoc (100%) diff --git a/framework-docs/modules/ROOT/nav.adoc b/framework-docs/modules/ROOT/nav.adoc index 3f7a6e2ba07..c0aa14fcb7e 100644 --- a/framework-docs/modules/ROOT/nav.adoc +++ b/framework-docs/modules/ROOT/nav.adoc @@ -158,31 +158,31 @@ **** xref:testing/spring-mvc-test-framework/server-htmlunit/geb.adoc[] ** xref:testing/spring-mvc-test-client.adoc[] ** xref:testing/appendix.adoc[] -** xref:testing/annotations.adoc[] -*** xref:testing/annotations/integration-standard.adoc[] -*** xref:testing/annotations/integration-spring.adoc[] -**** xref:testing/annotations/integration-spring/annotation-bootstrapwith.adoc[] -**** xref:testing/annotations/integration-spring/annotation-contextconfiguration.adoc[] -**** xref:testing/annotations/integration-spring/annotation-webappconfiguration.adoc[] -**** xref:testing/annotations/integration-spring/annotation-contexthierarchy.adoc[] -**** xref:testing/annotations/integration-spring/annotation-activeprofiles.adoc[] -**** xref:testing/annotations/integration-spring/annotation-testpropertysource.adoc[] -**** xref:testing/annotations/integration-spring/annotation-dynamicpropertysource.adoc[] -**** xref:testing/annotations/integration-spring/annotation-dirtiescontext.adoc[] -**** xref:testing/annotations/integration-spring/annotation-testexecutionlisteners.adoc[] -**** xref:testing/annotations/integration-spring/annotation-recordapplicationevents.adoc[] -**** xref:testing/annotations/integration-spring/annotation-commit.adoc[] -**** xref:testing/annotations/integration-spring/annotation-rollback.adoc[] -**** xref:testing/annotations/integration-spring/annotation-beforetransaction.adoc[] -**** xref:testing/annotations/integration-spring/annotation-aftertransaction.adoc[] -**** xref:testing/annotations/integration-spring/annotation-sql.adoc[] -**** xref:testing/annotations/integration-spring/annotation-sqlconfig.adoc[] -**** xref:testing/annotations/integration-spring/annotation-sqlmergemode.adoc[] -**** xref:testing/annotations/integration-spring/annotation-sqlgroup.adoc[] -*** xref:testing/annotations/integration-junit4.adoc[] -*** xref:testing/annotations/integration-junit-jupiter.adoc[] -*** xref:testing/annotations/integration-meta.adoc[] -** xref:testing/resources.adoc[] +*** xref:testing/annotations.adoc[] +**** xref:testing/annotations/integration-standard.adoc[] +**** xref:testing/annotations/integration-spring.adoc[] +***** xref:testing/annotations/integration-spring/annotation-bootstrapwith.adoc[] +***** xref:testing/annotations/integration-spring/annotation-contextconfiguration.adoc[] +***** xref:testing/annotations/integration-spring/annotation-webappconfiguration.adoc[] +***** xref:testing/annotations/integration-spring/annotation-contexthierarchy.adoc[] +***** xref:testing/annotations/integration-spring/annotation-activeprofiles.adoc[] +***** xref:testing/annotations/integration-spring/annotation-testpropertysource.adoc[] +***** xref:testing/annotations/integration-spring/annotation-dynamicpropertysource.adoc[] +***** xref:testing/annotations/integration-spring/annotation-dirtiescontext.adoc[] +***** xref:testing/annotations/integration-spring/annotation-testexecutionlisteners.adoc[] +***** xref:testing/annotations/integration-spring/annotation-recordapplicationevents.adoc[] +***** xref:testing/annotations/integration-spring/annotation-commit.adoc[] +***** xref:testing/annotations/integration-spring/annotation-rollback.adoc[] +***** xref:testing/annotations/integration-spring/annotation-beforetransaction.adoc[] +***** xref:testing/annotations/integration-spring/annotation-aftertransaction.adoc[] +***** xref:testing/annotations/integration-spring/annotation-sql.adoc[] +***** xref:testing/annotations/integration-spring/annotation-sqlconfig.adoc[] +***** xref:testing/annotations/integration-spring/annotation-sqlmergemode.adoc[] +***** xref:testing/annotations/integration-spring/annotation-sqlgroup.adoc[] +**** xref:testing/annotations/integration-junit4.adoc[] +**** xref:testing/annotations/integration-junit-jupiter.adoc[] +**** xref:testing/annotations/integration-meta.adoc[] +*** xref:testing/resources.adoc[] * xref:data-access.adoc[] ** xref:data-access/transaction.adoc[] *** xref:data-access/transaction/motivation.adoc[] @@ -268,11 +268,24 @@ **** xref:web/webmvc/mvc-controller/ann-initbinder.adoc[] **** xref:web/webmvc/mvc-controller/ann-exceptionhandler.adoc[] **** xref:web/webmvc/mvc-controller/ann-advice.adoc[] +*** xref:web/webmvc-functional.adoc[] *** xref:web/webmvc/mvc-uri-building.adoc[] *** xref:web/webmvc/mvc-ann-async.adoc[] +*** xref:web/webmvc-cors.adoc[] *** xref:web/webmvc/mvc-ann-rest-exceptions.adoc[] *** xref:web/webmvc/mvc-security.adoc[] *** xref:web/webmvc/mvc-caching.adoc[] +*** xref:web/webmvc-view.adoc[] +**** xref:web/webmvc-view/mvc-thymeleaf.adoc[] +**** xref:web/webmvc-view/mvc-freemarker.adoc[] +**** xref:web/webmvc-view/mvc-groovymarkup.adoc[] +**** xref:web/webmvc-view/mvc-script.adoc[] +**** xref:web/webmvc-view/mvc-jsp.adoc[] +**** xref:web/webmvc-view/mvc-feeds.adoc[] +**** xref:web/webmvc-view/mvc-document.adoc[] +**** xref:web/webmvc-view/mvc-jackson.adoc[] +**** xref:web/webmvc-view/mvc-xml-marshalling.adoc[] +**** xref:web/webmvc-view/mvc-xslt.adoc[] *** xref:web/webmvc/mvc-config.adoc[] **** xref:web/webmvc/mvc-config/enable.adoc[] **** xref:web/webmvc/mvc-config/customize.adoc[] @@ -289,21 +302,6 @@ **** xref:web/webmvc/mvc-config/advanced-java.adoc[] **** xref:web/webmvc/mvc-config/advanced-xml.adoc[] *** xref:web/webmvc/mvc-http2.adoc[] -** xref:web/web-data-binding-model-design.adoc[] -** xref:web/webmvc-functional.adoc[] -** xref:web/web-uris.adoc[] -** xref:web/webmvc-cors.adoc[] -** xref:web/webmvc-view.adoc[] -*** xref:web/webmvc-view/mvc-thymeleaf.adoc[] -*** xref:web/webmvc-view/mvc-freemarker.adoc[] -*** xref:web/webmvc-view/mvc-groovymarkup.adoc[] -*** xref:web/webmvc-view/mvc-script.adoc[] -*** xref:web/webmvc-view/mvc-jsp.adoc[] -*** xref:web/webmvc-view/mvc-feeds.adoc[] -*** xref:web/webmvc-view/mvc-document.adoc[] -*** xref:web/webmvc-view/mvc-jackson.adoc[] -*** xref:web/webmvc-view/mvc-xml-marshalling.adoc[] -*** xref:web/webmvc-view/mvc-xslt.adoc[] ** xref:web/webmvc-client.adoc[] ** xref:web/webmvc-test.adoc[] ** xref:web/websocket.adoc[] @@ -333,7 +331,6 @@ **** xref:web/websocket/stomp/configuration-performance.adoc[] **** xref:web/websocket/stomp/stats.adoc[] **** xref:web/websocket/stomp/testing.adoc[] -** xref:web/websocket-intro.adoc[] ** xref:web/integration.adoc[] * xref:web-reactive.adoc[] ** xref:web/webflux.adoc[] @@ -365,15 +362,15 @@ **** xref:web/webflux/controller/ann-initbinder.adoc[] **** xref:web/webflux/controller/ann-exceptions.adoc[] **** xref:web/webflux/controller/ann-advice.adoc[] +*** xref:web/webflux-functional.adoc[] *** xref:web/webflux/uri-building.adoc[] +*** xref:web/webflux-cors.adoc[] *** xref:web/webflux/ann-rest-exceptions.adoc[] *** xref:web/webflux/security.adoc[] *** xref:web/webflux/caching.adoc[] +*** xref:web/webflux-view.adoc[] *** xref:web/webflux/config.adoc[] *** xref:web/webflux/http2.adoc[] -** xref:web/webflux-functional.adoc[] -** xref:web/webflux-cors.adoc[] -** xref:web/webflux-view.adoc[] ** xref:web/webflux-webclient.adoc[] *** xref:web/webflux-webclient/client-builder.adoc[] *** xref:web/webflux-webclient/client-retrieve.adoc[] @@ -384,8 +381,11 @@ *** xref:web/webflux-webclient/client-context.adoc[] *** xref:web/webflux-webclient/client-synchronous.adoc[] *** xref:web/webflux-webclient/client-testing.adoc[] +** xref:web/webflux-http-interface-client.adoc[] ** xref:web/webflux-websocket.adoc[] -* xref:rsocket.adoc[] +** xref:web/webflux-test.adoc[] +** xref:rsocket.adoc[] +** xref:web/webflux-reactive-libraries.adoc[] * xref:integration.adoc[] ** xref:integration/rest-clients.adoc[] ** xref:integration/jms.adoc[] @@ -431,3 +431,4 @@ ** xref:languages/groovy.adoc[] ** xref:languages/dynamic.adoc[] * xref:appendix.adoc[] +* https://github.com/spring-projects/spring-framework/wiki[Wiki] \ No newline at end of file diff --git a/framework-docs/modules/ROOT/pages/data-access/oxm.adoc b/framework-docs/modules/ROOT/pages/data-access/oxm.adoc index 81aec53f134..a1637cbff6a 100644 --- a/framework-docs/modules/ROOT/pages/data-access/oxm.adoc +++ b/framework-docs/modules/ROOT/pages/data-access/oxm.adoc @@ -558,6 +558,3 @@ Therefore, it has limited namespace support. As a result, it is rather unsuitabl within Web Services. - - -include:../:data-access/appendix.adoc[leveloffset=+1] diff --git a/framework-docs/modules/ROOT/pages/languages/kotlin/coroutines.adoc b/framework-docs/modules/ROOT/pages/languages/kotlin/coroutines.adoc index 699ab8d4381..17becb7aa15 100644 --- a/framework-docs/modules/ROOT/pages/languages/kotlin/coroutines.adoc +++ b/framework-docs/modules/ROOT/pages/languages/kotlin/coroutines.adoc @@ -39,7 +39,7 @@ Version `1.4.0` and above are supported. -[[how-reactive-translates-to-coroutines?]] +[[how-reactive-translates-to-coroutines]] == How Reactive translates to Coroutines? For return values, the translation from Reactive to Coroutines APIs is the following: diff --git a/framework-docs/modules/ROOT/pages/web-reactive.adoc b/framework-docs/modules/ROOT/pages/web-reactive.adoc index 4fc5fbe565c..b7ef832ffa3 100644 --- a/framework-docs/modules/ROOT/pages/web-reactive.adoc +++ b/framework-docs/modules/ROOT/pages/web-reactive.adoc @@ -9,65 +9,3 @@ the reactive xref:web/webflux-webclient.adoc[`WebClient`], support for xref:web- and xref:web-reactive.adoc#webflux-reactive-libraries[reactive libraries]. For Servlet-stack web applications, see xref:web.adoc[Web on Servlet Stack]. - - - -[[webflux-http-interface-client]] -== HTTP Interface Client - -The Spring Frameworks lets you define an HTTP service as a Java interface with HTTP -exchange methods. You can then generate a proxy that implements this interface and -performs the exchanges. This helps to simplify HTTP remote access and provides additional -flexibility for to choose an API style such as synchronous or reactive. - -See xref:integration/rest-clients.adoc#rest-http-interface[REST Endpoints] for details. - - - - - -[[webflux-test]] -== Testing -[.small]#xref:web/webmvc-test.adoc[Same in Spring MVC]# - -The `spring-test` module provides mock implementations of `ServerHttpRequest`, -`ServerHttpResponse`, and `ServerWebExchange`. -See xref:testing/unit.adoc#mock-objects-web-reactive[Spring Web Reactive] for a -discussion of mock objects. - -xref:testing/webtestclient.adoc[`WebTestClient`] builds on these mock request and -response objects to provide support for testing WebFlux applications without an HTTP -server. You can use the `WebTestClient` for end-to-end integration tests, too. - - - - -[[webflux-reactive-libraries]] -== Reactive Libraries - -`spring-webflux` depends on `reactor-core` and uses it internally to compose asynchronous -logic and to provide Reactive Streams support. Generally, WebFlux APIs return `Flux` or -`Mono` (since those are used internally) and leniently accept any Reactive Streams -`Publisher` implementation as input. The use of `Flux` versus `Mono` is important, because -it helps to express cardinality -- for example, whether a single or multiple asynchronous -values are expected, and that can be essential for making decisions (for example, when -encoding or decoding HTTP messages). - -For annotated controllers, WebFlux transparently adapts to the reactive library chosen by -the application. This is done with the help of the -{api-spring-framework}/core/ReactiveAdapterRegistry.html[`ReactiveAdapterRegistry`], which -provides pluggable support for reactive library and other asynchronous types. The registry -has built-in support for RxJava 3, Kotlin coroutines and SmallRye Mutiny, but you can -register others, too. - -For functional APIs (such as <>, the `WebClient`, and others), the general rules -for WebFlux APIs apply -- `Flux` and `Mono` as return values and a Reactive Streams -`Publisher` as input. When a `Publisher`, whether custom or from another reactive library, -is provided, it can be treated only as a stream with unknown semantics (0..N). If, however, -the semantics are known, you can wrap it with `Flux` or `Mono.from(Publisher)` instead -of passing the raw `Publisher`. - -For example, given a `Publisher` that is not a `Mono`, the Jackson JSON message writer -expects multiple values. If the media type implies an infinite stream (for example, -`application/json+stream`), values are written and flushed individually. Otherwise, -values are buffered into a list and rendered as a JSON array. diff --git a/framework-docs/modules/ROOT/pages/web/webflux-http-interface-client.adoc b/framework-docs/modules/ROOT/pages/web/webflux-http-interface-client.adoc new file mode 100644 index 00000000000..871667acaaa --- /dev/null +++ b/framework-docs/modules/ROOT/pages/web/webflux-http-interface-client.adoc @@ -0,0 +1,10 @@ +[[webflux-http-interface-client]] += HTTP Interface Client + +The Spring Frameworks lets you define an HTTP service as a Java interface with HTTP +exchange methods. You can then generate a proxy that implements this interface and +performs the exchanges. This helps to simplify HTTP remote access and provides additional +flexibility for to choose an API style such as synchronous or reactive. + +See xref:integration/rest-clients.adoc#rest-http-interface[REST Endpoints] for details. + diff --git a/framework-docs/modules/ROOT/pages/web/webflux-reactive-libraries.adoc b/framework-docs/modules/ROOT/pages/web/webflux-reactive-libraries.adoc new file mode 100644 index 00000000000..45ac4fcd581 --- /dev/null +++ b/framework-docs/modules/ROOT/pages/web/webflux-reactive-libraries.adoc @@ -0,0 +1,29 @@ +[[webflux-reactive-libraries]] += Reactive Libraries + +`spring-webflux` depends on `reactor-core` and uses it internally to compose asynchronous +logic and to provide Reactive Streams support. Generally, WebFlux APIs return `Flux` or +`Mono` (since those are used internally) and leniently accept any Reactive Streams +`Publisher` implementation as input. The use of `Flux` versus `Mono` is important, because +it helps to express cardinality -- for example, whether a single or multiple asynchronous +values are expected, and that can be essential for making decisions (for example, when +encoding or decoding HTTP messages). + +For annotated controllers, WebFlux transparently adapts to the reactive library chosen by +the application. This is done with the help of the +{api-spring-framework}/core/ReactiveAdapterRegistry.html[`ReactiveAdapterRegistry`], which +provides pluggable support for reactive library and other asynchronous types. The registry +has built-in support for RxJava 3, Kotlin coroutines and SmallRye Mutiny, but you can +register others, too. + +For functional APIs (such as <>, the `WebClient`, and others), the general rules +for WebFlux APIs apply -- `Flux` and `Mono` as return values and a Reactive Streams +`Publisher` as input. When a `Publisher`, whether custom or from another reactive library, +is provided, it can be treated only as a stream with unknown semantics (0..N). If, however, +the semantics are known, you can wrap it with `Flux` or `Mono.from(Publisher)` instead +of passing the raw `Publisher`. + +For example, given a `Publisher` that is not a `Mono`, the Jackson JSON message writer +expects multiple values. If the media type implies an infinite stream (for example, +`application/json+stream`), values are written and flushed individually. Otherwise, +values are buffered into a list and rendered as a JSON array. \ No newline at end of file diff --git a/framework-docs/modules/ROOT/pages/web/webflux-test.adoc b/framework-docs/modules/ROOT/pages/web/webflux-test.adoc new file mode 100644 index 00000000000..ed93058dac2 --- /dev/null +++ b/framework-docs/modules/ROOT/pages/web/webflux-test.adoc @@ -0,0 +1,12 @@ +[[webflux-test]] += Testing +[.small]#xref:web/webmvc-test.adoc[Same in Spring MVC]# + +The `spring-test` module provides mock implementations of `ServerHttpRequest`, +`ServerHttpResponse`, and `ServerWebExchange`. +See xref:testing/unit.adoc#mock-objects-web-reactive[Spring Web Reactive] for a +discussion of mock objects. + +xref:testing/webtestclient.adoc[`WebTestClient`] builds on these mock request and +response objects to provide support for testing WebFlux applications without an HTTP +server. You can use the `WebTestClient` for end-to-end integration tests, too. \ No newline at end of file diff --git a/framework-docs/modules/ROOT/pages/web/webflux-websocket.adoc b/framework-docs/modules/ROOT/pages/web/webflux-websocket.adoc index e68b54067a6..01f1134dd85 100644 --- a/framework-docs/modules/ROOT/pages/web/webflux-websocket.adoc +++ b/framework-docs/modules/ROOT/pages/web/webflux-websocket.adoc @@ -5,9 +5,7 @@ This part of the reference documentation covers support for reactive-stack WebSocket messaging. - - - +include::partial$web/websocket-intro.adoc[leveloffset=+1] [[webflux-websocket-server]] == WebSocket API diff --git a/framework-docs/modules/ROOT/pages/web/webflux/caching.adoc b/framework-docs/modules/ROOT/pages/web/webflux/caching.adoc index 7586c31997b..0c5c120714b 100644 --- a/framework-docs/modules/ROOT/pages/web/webflux/caching.adoc +++ b/framework-docs/modules/ROOT/pages/web/webflux/caching.adoc @@ -171,7 +171,3 @@ to 412 (PRECONDITION_FAILED) to prevent concurrent modification. You should serve static resources with a `Cache-Control` and conditional response headers for optimal performance. See the section on configuring xref:web/webflux/config.adoc#webflux-config-static-resources[Static Resources]. - -include:../:webflux-view.adoc[leveloffset=+1] - - diff --git a/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-advice.adoc b/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-advice.adoc index 0be31002a66..1ad6529c068 100644 --- a/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-advice.adoc +++ b/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-advice.adoc @@ -62,8 +62,3 @@ performance if used extensively. See the {api-spring-framework}/web/bind/annotation/ControllerAdvice.html[`@ControllerAdvice`] javadoc for more details. -include:../../:webflux-functional.adoc[leveloffset=+1] - - - - diff --git a/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-initbinder.adoc b/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-initbinder.adoc index d3f5cb6b946..2c523e925fd 100644 --- a/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-initbinder.adoc +++ b/framework-docs/modules/ROOT/pages/web/webflux/controller/ann-initbinder.adoc @@ -102,6 +102,4 @@ controller-specific `Formatter` instances, as the following example shows: == Model Design [.small]#xref:web/webmvc/mvc-controller/ann-initbinder.adoc#mvc-ann-initbinder-model-design[See equivalent in the Servlet stack]# -include:../../:web-data-binding-model-design.adoc[] - diff --git a/framework-docs/modules/ROOT/pages/web/webflux/uri-building.adoc b/framework-docs/modules/ROOT/pages/web/webflux/uri-building.adoc index 559fcd2479e..8ca87a11f34 100644 --- a/framework-docs/modules/ROOT/pages/web/webflux/uri-building.adoc +++ b/framework-docs/modules/ROOT/pages/web/webflux/uri-building.adoc @@ -6,8 +6,6 @@ This section describes various options available in the Spring Framework to prepare URIs. -include:../:web-uris.adoc[leveloffset=+2] - -include:../:webflux-cors.adoc[leveloffset=+1] +include::partial$web/web-uris.adoc[leveloffset=+1] diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-async.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-async.adoc index 4fd42b9f714..8cad1a50b91 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-async.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-ann-async.adoc @@ -484,7 +484,3 @@ Note that you can also set the default timeout value on a `DeferredResult`, a `ResponseBodyEmitter`, and an `SseEmitter`. For a `Callable`, you can use `WebAsyncTask` to provide a timeout value. - -include:../:webmvc-cors.adoc[leveloffset=+1] - - diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-caching.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-caching.adoc index f84647c9a7f..da2ed1757f1 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-caching.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-caching.adoc @@ -187,8 +187,3 @@ for optimal performance. See the section on configuring xref:web/webmvc/mvc-conf You can use the `ShallowEtagHeaderFilter` to add "`shallow`" `eTag` values that are computed from the response content and, thus, save bandwidth but not CPU time. See xref:web/webmvc/filters.adoc#filters-shallow-etag[Shallow ETag]. -include:../:webmvc-view.adoc[leveloffset=+1] - - - - diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-advice.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-advice.adoc index 1f50964cf4f..7cda8894f6a 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-advice.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-advice.adoc @@ -59,7 +59,6 @@ performance if used extensively. See the {api-spring-framework}/web/bind/annotation/ControllerAdvice.html[`@ControllerAdvice`] javadoc for more details. -include:../../:webmvc-functional.adoc[leveloffset=+1] diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-initbinder.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-initbinder.adoc index ded39846ce0..2c2a5ecce64 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-initbinder.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-initbinder.adoc @@ -97,6 +97,6 @@ controller-specific `Formatter` implementations, as the following example shows: == Model Design [.small]#xref:web/webflux/controller/ann-initbinder.adoc#webflux-ann-initbinder-model-design[See equivalent in the Reactive stack]# -include:../../:web-data-binding-model-design.adoc[] +include::partial$web/web-data-binding-model-design.adoc[] diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-uri-building.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-uri-building.adoc index 235652b9849..ea5a7699957 100644 --- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-uri-building.adoc +++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-uri-building.adoc @@ -5,7 +5,7 @@ This section describes various options available in the Spring Framework to work with URI's. -include:../:web-uris.adoc[leveloffset=+2] +include::partial$web/web-uris.adoc[leveloffset=+1] diff --git a/framework-docs/modules/ROOT/pages/web/websocket.adoc b/framework-docs/modules/ROOT/pages/web/websocket.adoc index d9fd668f030..726c9c2de3e 100644 --- a/framework-docs/modules/ROOT/pages/web/websocket.adoc +++ b/framework-docs/modules/ROOT/pages/web/websocket.adoc @@ -7,7 +7,6 @@ This part of the reference documentation covers support for Servlet stack, WebSo messaging that includes raw WebSocket interactions, WebSocket emulation through SockJS, and publish-subscribe messaging through STOMP as a sub-protocol over WebSocket. - - +include::partial$web/websocket-intro.adoc[leveloffset=+1] diff --git a/framework-docs/modules/ROOT/pages/web/web-data-binding-model-design.adoc b/framework-docs/modules/ROOT/partials/web/web-data-binding-model-design.adoc similarity index 100% rename from framework-docs/modules/ROOT/pages/web/web-data-binding-model-design.adoc rename to framework-docs/modules/ROOT/partials/web/web-data-binding-model-design.adoc diff --git a/framework-docs/modules/ROOT/pages/web/web-uris.adoc b/framework-docs/modules/ROOT/partials/web/web-uris.adoc similarity index 100% rename from framework-docs/modules/ROOT/pages/web/web-uris.adoc rename to framework-docs/modules/ROOT/partials/web/web-uris.adoc diff --git a/framework-docs/modules/ROOT/pages/web/websocket-intro.adoc b/framework-docs/modules/ROOT/partials/web/websocket-intro.adoc similarity index 100% rename from framework-docs/modules/ROOT/pages/web/websocket-intro.adoc rename to framework-docs/modules/ROOT/partials/web/websocket-intro.adoc