>` provides all three -- response status, headers, and body,
asynchronously at a later point. This allows the response status and headers to vary
depending on the outcome of asynchronous request handling.
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/return-types.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/return-types.adoc
index bd6aa862ec1..29bf34c7b91 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/return-types.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/return-types.adoc
@@ -101,5 +101,3 @@ supported for all return values.
{spring-framework-api}/beans/BeanUtils.html#isSimpleProperty-java.lang.Class-[BeanUtils#isSimpleProperty],
in which case it remains unresolved.
|===
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattribute.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattribute.adoc
index 5e7754d3c4e..3e32bee6e54 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattribute.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattribute.adoc
@@ -40,5 +40,3 @@ For use cases that require adding or removing session attributes, consider injec
For temporary storage of model attributes in the session as part of a controller
workflow, consider using `@SessionAttributes` as described in
xref:web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc[`@SessionAttributes`].
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc
index f9497c08bb4..bff111b04a8 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc
@@ -91,5 +91,3 @@ class EditPetForm {
<1> Storing the `Pet` value in the Servlet session.
<2> Clearing the `Pet` value from the Servlet session.
======
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/typeconversion.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/typeconversion.adoc
index 76f10b3d40e..dc122a903a5 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/typeconversion.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-methods/typeconversion.adoc
@@ -30,5 +30,3 @@ Alternatively, you may specifically handle, for example, the resulting `MissingP
in the case of a required `@PathVariable`. A null value after conversion will be treated like
an empty original value, so the corresponding `Missing...Exception` variants will be thrown.
====
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-modelattrib-methods.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-modelattrib-methods.adoc
index c0e28ba010f..0529708ea4f 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-modelattrib-methods.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-modelattrib-methods.adoc
@@ -112,6 +112,3 @@ Kotlin::
}
----
======
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-requestmapping.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-requestmapping.adoc
index cf1bfea9cd4..94ff1b4f420 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-requestmapping.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann-requestmapping.adoc
@@ -6,7 +6,6 @@
This section discusses request mapping for annotated controllers.
-
[[mvc-ann-requestmapping-annotation]]
== `@RequestMapping`
@@ -25,9 +24,10 @@ There are also HTTP method specific shortcut variants of `@RequestMapping`:
* `@DeleteMapping`
* `@PatchMapping`
-The shortcuts are xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-composed[Custom Annotations] that are provided because,
-arguably, most controller methods should be mapped to a specific HTTP method versus
-using `@RequestMapping`, which, by default, matches to all HTTP methods.
+The shortcuts are
+xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-composed[Custom Annotations]
+that are provided because, arguably, most controller methods should be mapped to a specific
+HTTP method versus using `@RequestMapping`, which, by default, matches to all HTTP methods.
A `@RequestMapping` is still needed at the class level to express shared mappings.
NOTE: `@RequestMapping` cannot be used in conjunction with other `@RequestMapping`
@@ -84,7 +84,6 @@ Kotlin::
======
-
[[mvc-ann-requestmapping-uri-templates]]
== URI patterns
[.small]#xref:web/webflux/controller/ann-requestmapping.adoc#webflux-ann-requestmapping-uri-templates[See equivalent in the Reactive stack]#
@@ -224,7 +223,6 @@ other property sources. You can use this, for example, to parameterize a base UR
some external configuration.
-
[[mvc-ann-requestmapping-pattern-comparison]]
== Pattern Comparison
[.small]#xref:web/webflux/controller/ann-requestmapping.adoc#webflux-ann-requestmapping-pattern-comparison[See equivalent in the Reactive stack]#
@@ -425,7 +423,8 @@ Kotlin::
======
TIP: You can match `Content-Type` and `Accept` with the headers condition, but it is better to use
-xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-consumes[consumes] and xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-produces[produces]
+xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-consumes[consumes]
+and xref:web/webmvc/mvc-controller/ann-requestmapping.adoc#mvc-ann-requestmapping-produces[produces]
instead.
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann.adoc
index 493d1d74d5f..d95c9b0fd62 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-controller/ann.adoc
@@ -39,6 +39,3 @@ NOTE: Keep in mind that as of 6.0, with interface proxying, Spring MVC no longer
controllers based solely on a type-level `@RequestMapping` annotation on the interface.
Please, enable class based proxying, or otherwise the interface must also have an
`@Controller` annotation.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-security.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-security.adoc
index 9a4f769aa5a..50143f08a06 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-security.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-security.adoc
@@ -14,7 +14,3 @@ reference documentation, including:
* {docs-spring-security}/features/exploits/headers.html[Security Response Headers]
https://github.com/hdiv/hdiv[HDIV] is another web security framework that integrates with Spring MVC.
-
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-servlet.adoc b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-servlet.adoc
index 5205cec16d1..34d9fd30c4f 100644
--- a/framework-docs/modules/ROOT/pages/web/webmvc/mvc-servlet.adoc
+++ b/framework-docs/modules/ROOT/pages/web/webmvc/mvc-servlet.adoc
@@ -112,6 +112,3 @@ bootstrap itself and the embedded Servlet container. `Filter` and `Servlet` decl
are detected in Spring configuration and registered with the Servlet container.
For more details, see the
{spring-boot-docs-ref}/web/servlet.html#web.servlet.embedded-container[Spring Boot documentation].
-
-
-
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 4aba9d6ff6c..bd1ff485dbe 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
@@ -8,7 +8,6 @@ This section describes various options available in the Spring Framework to work
include::partial$web/web-uris.adoc[leveloffset=+1]
-
[[mvc-servleturicomponentsbuilder]]
== Relative Servlet Requests
@@ -117,7 +116,6 @@ xref:web/webmvc/filters.adoc#filters-forwarded-headers[`ForwardedHeaderFilter`]
such headers.
-
[[mvc-links-to-controllers]]
== Links to Controllers
@@ -267,7 +265,6 @@ xref:web/webmvc/filters.adoc#filters-forwarded-headers[ForwardedHeaderFilter] to
such headers.
-
[[mvc-links-to-controllers-from-views]]
== Links in Views
@@ -322,7 +319,3 @@ capital letters of the class and the method name (for example, the `getThing` me
`ThingController` becomes "TC#getThing"). If there is a name clash, you can use
`@RequestMapping(name="..")` to assign an explicit name or implement your own
`HandlerMethodMappingNamingStrategy`.
-
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket.adoc b/framework-docs/modules/ROOT/pages/web/websocket.adoc
index f917e7e0939..9f623514262 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket.adoc
@@ -9,5 +9,3 @@ messaging that includes raw WebSocket interactions, WebSocket emulation through
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/websocket/fallback.adoc b/framework-docs/modules/ROOT/pages/web/websocket/fallback.adoc
index c79fd0a70f8..86b979a76b4 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/fallback.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/fallback.adoc
@@ -13,7 +13,6 @@ On the Servlet stack, the Spring Framework provides both server (and also client
for the SockJS protocol.
-
[[websocket-fallback-sockjs-overview]]
== Overview
@@ -78,7 +77,6 @@ For even more detail, see the SockJS protocol
https://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html[narrated test].
-
[[websocket-fallback-sockjs-enable]]
== Enabling SockJS
@@ -101,7 +99,6 @@ transport types supported by browser. The client also provides several
configuration options -- for example, to specify which transports to include.
-
[[websocket-fallback-xhr-vs-iframe]]
== IE 8 and 9
@@ -182,7 +179,6 @@ be cached. For details on how to enable it see the
{sockjs-client}[SockJS client] page.
-
[[websocket-fallback-sockjs-heartbeat]]
== Heartbeats
@@ -202,7 +198,6 @@ with default settings based on the number of available processors. You
should consider customizing the settings according to your specific needs.
-
[[websocket-fallback-sockjs-servlet3-async]]
== Client Disconnects
@@ -229,15 +224,15 @@ a minimal message by using the dedicated log category, `DISCONNECTED_CLIENT_LOG_
log category to TRACE.
-
[[websocket-fallback-cors]]
== SockJS and CORS
-If you allow cross-origin requests (see xref:web/websocket/server.adoc#websocket-server-allowed-origins[Allowed Origins]), the SockJS protocol
-uses CORS for cross-domain support in the XHR streaming and polling transports. Therefore,
-CORS headers are added automatically, unless the presence of CORS headers in the response
-is detected. So, if an application is already configured to provide CORS support (for example,
-through a Servlet Filter), Spring's `SockJsService` skips this part.
+If you allow cross-origin requests (see
+xref:web/websocket/server.adoc#websocket-server-allowed-origins[Allowed Origins]), the SockJS
+protocol uses CORS for cross-domain support in the XHR streaming and polling transports.
+Therefore, CORS headers are added automatically, unless the presence of CORS headers in the
+response is detected. So, if an application is already configured to provide CORS support
+(for example, through a Servlet Filter), Spring's `SockJsService` skips this part.
It is also possible to disable the addition of these CORS headers by setting the
`suppressCors` property in Spring's SockJsService.
@@ -257,7 +252,6 @@ Alternatively, if the CORS configuration allows it, consider excluding URLs with
SockJS endpoint prefix, thus letting Spring's `SockJsService` handle it.
-
[[websocket-fallback-sockjs-client]]
== `SockJsClient`
@@ -333,7 +327,3 @@ that you should also consider customizing:
<2> Set the `httpMessageCacheSize` property to 1,000 (the default is `100`).
<3> Set the `disconnectDelay` property to 30 property seconds (the default is five seconds
-- `5 * 1000`).
-
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/server.adoc b/framework-docs/modules/ROOT/pages/web/websocket/server.adoc
index 1e2fcd1595e..b17bc2e0bc6 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/server.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/server.adoc
@@ -7,7 +7,6 @@ The Spring Framework provides a WebSocket API that you can use to write client-
server-side applications that handle WebSocket messages.
-
[[websocket-server-handler]]
== `WebSocketHandler`
[.small]#xref:web/webflux-websocket.adoc#webflux-websocket-server-handler[See equivalent in the Reactive stack]#
@@ -36,7 +35,6 @@ sending. One option is to wrap the `WebSocketSession` with
{spring-framework-api}/web/socket/handler/ConcurrentWebSocketSessionDecorator.html[`ConcurrentWebSocketSessionDecorator`].
-
[[websocket-server-handshake]]
== WebSocket Handshake
[.small]#xref:web/webflux-websocket.adoc#webflux-websocket-server-handshake[See equivalent in the Reactive stack]#
@@ -67,7 +65,6 @@ exceptions that arise from any `WebSocketHandler` method and closes the WebSocke
session with status `1011`, which indicates a server error.
-
[[websocket-server-deployment]]
== Deployment
@@ -129,7 +126,6 @@ Java initialization API. The following example shows how to do so:
----
-
[[websocket-server-runtime-configuration]]
== Configuring the Server
[.small]#xref:web/webflux-websocket.adoc#webflux-websocket-server-config[See equivalent in the Reactive stack]#
@@ -155,7 +151,6 @@ xref:web/websocket/stomp/server-config.adoc[STOMP WebSocket transport]
properties.
-
[[websocket-server-allowed-origins]]
== Allowed Origins
[.small]#xref:web/webflux-websocket.adoc#webflux-websocket-server-cors[See equivalent in the Reactive stack]#
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp.adoc
index 405d956c8a1..aa8c4ac5975 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp.adoc
@@ -8,6 +8,3 @@ sub-protocol (that is, a higher-level messaging protocol) to use on top of WebSo
define what kind of messages each can send, what the format is, the content of each
message, and so on. The use of a sub-protocol is optional but, either way, the client and
the server need to agree on some protocol that defines message content.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/application-context-events.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/application-context-events.adoc
index 7d59414d2cc..5fd70abac99 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/application-context-events.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/application-context-events.adoc
@@ -35,6 +35,3 @@ NOTE: When you use a full-featured broker, the STOMP "`broker relay`" automatica
however, are not automatically reconnected. Assuming heartbeats are enabled, the client
typically notices the broker is not responding within 10 seconds. Clients need to
implement their own reconnecting logic.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication-token-based.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication-token-based.adoc
index b65811e74b8..f88920cb87d 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication-token-based.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication-token-based.adoc
@@ -47,6 +47,3 @@ you need to ensure that the authentication `ChannelInterceptor` config is ordere
ahead of Spring Security's. This is best done by declaring the custom interceptor in
its own implementation of `WebSocketMessageBrokerConfigurer` that is marked with
`@Order(Ordered.HIGHEST_PRECEDENCE + 99)`.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication.adoc
index b8dafd67d43..a2bc8d09db7 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authentication.adoc
@@ -29,6 +29,3 @@ Those were originally designed for and are needed for STOMP over TCP. However, f
over WebSocket, by default, Spring ignores authentication headers at the STOMP protocol
level, and assumes that the user is already authenticated at the HTTP transport level.
The expectation is that the WebSocket or SockJS session contain the authenticated user.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authorization.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authorization.adoc
index 95af447e597..a8a3bc520a0 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/authorization.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/authorization.adoc
@@ -8,6 +8,3 @@ that uses a `ChannelInterceptor` to authorize messages based on the user header
Also, Spring Session provides
{docs-spring-session}/web-socket.html[WebSocket integration]
that ensures the user's HTTP session does not expire while the WebSocket session is still active.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/benefits.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/benefits.adoc
index 31e3e7f3224..3550cc14337 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/benefits.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/benefits.adoc
@@ -16,6 +16,3 @@ manage subscriptions and broadcast messages.
routed to them based on the STOMP destination header versus handling raw WebSocket messages
with a single `WebSocketHandler` for a given connection.
* You can use Spring Security to secure messages based on STOMP destinations and message types.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/client.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/client.adoc
index ba205223a86..9de2b02e429 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/client.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/client.adoc
@@ -119,6 +119,3 @@ messages. When an inbound STOMP message size exceeds the configured limit, a
stompClient.setInboundMessageSizeLimit(64 * 1024); // 64KB
stompClient.setOutboundMessageSizeLimit(64 * 1024); // 64KB
----
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/configuration-performance.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/configuration-performance.adoc
index cc5df948025..1456a7e0770 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/configuration-performance.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/configuration-performance.adoc
@@ -88,6 +88,3 @@ However, when you use a full-featured broker (such as RabbitMQ), each applicatio
instance connects to the broker, and messages broadcast from one application
instance can be broadcast through the broker to WebSocket clients connected
through any other application instances.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/destination-separator.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/destination-separator.adoc
index 0c81e2c2b86..51de770cf82 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/destination-separator.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/destination-separator.adoc
@@ -24,6 +24,3 @@ the broker you use to see what conventions it supports for the destination heade
The "`simple broker`", on the other hand, does rely on the configured `PathMatcher`, so, if
you switch the separator, that change also applies to the broker and the way the broker matches
destinations from a message to patterns in subscriptions.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/enable.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/enable.adoc
index 831b1ff8dfa..021093ab65b 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/enable.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/enable.adoc
@@ -46,4 +46,3 @@ For more example code see:
interactive web application] -- a getting started guide.
* https://github.com/rstoyanchev/spring-websocket-portfolio[Stock Portfolio] -- a sample
application.
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-annotations.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-annotations.adoc
index 7479fd6dc97..db856e597c0 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-annotations.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-annotations.adoc
@@ -180,6 +180,3 @@ Typically, `@MessageExceptionHandler` methods apply within the `@Controller` cla
more globally (across controllers), you can declare them in a class marked with
`@ControllerAdvice`. This is comparable to the
xref:web/webmvc/mvc-controller/ann-advice.adoc[similar support] available in Spring MVC.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay-configure.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay-configure.adoc
index f13d532367f..39abc583994 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay-configure.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay-configure.adoc
@@ -43,6 +43,3 @@ The value of this property is set as the `host` header of every `CONNECT` frame
and can be useful (for example, in a cloud environment where the actual host to which
the TCP connection is established differs from the host that provides the
cloud-based STOMP service).
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay.adoc
index fd0ddcec226..8150421b59a 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-broker-relay.adoc
@@ -33,6 +33,3 @@ business services, and others) can also send messages to the broker relay, as de
in xref:web/websocket/stomp/handle-send.adoc[Sending Messages], to broadcast messages to subscribed WebSocket clients.
In effect, the broker relay enables robust and scalable message broadcasting.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-send.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-send.adoc
index e193522ab0c..0af57f19037 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-send.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/handle-send.adoc
@@ -30,6 +30,3 @@ type, as the following example shows:
However, you can also qualify it by its name (`brokerMessagingTemplate`), if another
bean of the same type exists.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/interceptors.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/interceptors.adoc
index 9bdab983516..1f7c794edb3 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/interceptors.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/interceptors.adoc
@@ -24,6 +24,3 @@ can be from the client or it can also be automatically generated when
the WebSocket session is closed. In some cases, an interceptor may intercept this
message more than once for each session. Components should be idempotent with regard to
multiple disconnect events.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/message-flow.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/message-flow.adoc
index aee0cd9adc8..2b4cb25c87b 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/message-flow.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/message-flow.adoc
@@ -85,6 +85,3 @@ and sent on the WebSocket connection.
The next section provides more details on annotated methods, including the
kinds of arguments and return values that are supported.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/overview.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/overview.adoc
index cf94589ba1d..52990bbb6f5 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/overview.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/overview.adoc
@@ -92,6 +92,3 @@ client subscription.
The preceding overview is intended to provide the most basic understanding of the
STOMP protocol. We recommended reviewing the protocol
https://stomp.github.io/stomp-specification-1.2.html[specification] in full.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/scope.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/scope.adoc
index b4300990abe..b066e00e56a 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/scope.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/scope.adoc
@@ -64,6 +64,3 @@ time it is accessed from the controller and stores the instance in the WebSocket
session attributes. The same instance is subsequently returned until the session
ends. WebSocket-scoped beans have all Spring lifecycle methods invoked, as
shown in the preceding examples.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/stats.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/stats.adoc
index 107f353fd42..eb8e4f69b93 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/stats.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/stats.adoc
@@ -54,6 +54,3 @@ Client Outbound Channel:: Statistics from the thread pool that backs the `client
SockJS Task Scheduler:: Statistics from the thread pool of the SockJS task scheduler that
is used to send heartbeats. Note that, when heartbeats are negotiated on the
STOMP level, the SockJS heartbeats are disabled.
-
-
-
diff --git a/framework-docs/modules/ROOT/pages/web/websocket/stomp/user-destination.adoc b/framework-docs/modules/ROOT/pages/web/websocket/stomp/user-destination.adoc
index 84fef9ffb79..9d22069b27b 100644
--- a/framework-docs/modules/ROOT/pages/web/websocket/stomp/user-destination.adoc
+++ b/framework-docs/modules/ROOT/pages/web/websocket/stomp/user-destination.adoc
@@ -112,6 +112,3 @@ destination to broadcast unresolved messages so that other servers have a chance
This can be done through the `userDestinationBroadcast` property of the
`MessageBrokerRegistry` in Java configuration and the `user-destination-broadcast` attribute
of the `message-broker` element in XML.
-
-
-
diff --git a/framework-docs/modules/ROOT/partials/web/forwarded-headers.adoc b/framework-docs/modules/ROOT/partials/web/forwarded-headers.adoc
index fa1de23973a..45e48114a61 100644
--- a/framework-docs/modules/ROOT/partials/web/forwarded-headers.adoc
+++ b/framework-docs/modules/ROOT/partials/web/forwarded-headers.adoc
@@ -5,15 +5,12 @@ host, port, and scheme from a client perspective.
{rfc-site}/rfc7239[RFC 7239] defines the `Forwarded` HTTP header
that proxies can use to provide information about the original request.
-
-
[[forwarded-headers-non-standard]]
=== Non-standard Headers
There are other non-standard headers, too, including `X-Forwarded-Host`, `X-Forwarded-Port`,
`X-Forwarded-Proto`, `X-Forwarded-Ssl`, and `X-Forwarded-Prefix`.
-
[[x-forwarded-host]]
==== X-Forwarded-Host
@@ -23,7 +20,6 @@ downstream server. For example, if a request of `https://example.com/resource` i
a proxy which forwards the request to `http://localhost:8080/resource`, then a header of
`X-Forwarded-Host: example.com` can be sent to inform the server that the original host was `example.com`.
-
[[x-forwarded-port]]
==== X-Forwarded-Port
@@ -33,7 +29,6 @@ communicate the original port to a downstream server. For example, if a request
`http://localhost:8080/resource`, then a header of `X-Forwarded-Port: 443` can be sent
to inform the server that the original port was `443`.
-
[[x-forwarded-proto]]
==== X-Forwarded-Proto
@@ -43,7 +38,6 @@ to a downstream server. For example, if a request of `https://example.com/resour
a proxy which forwards the request to `http://localhost:8080/resource`, then a header of
`X-Forwarded-Proto: https` can be sent to inform the server that the original protocol was `https`.
-
[[x-forwarded-ssl]]
==== X-Forwarded-Ssl
@@ -53,7 +47,6 @@ original protocol (for example, https / https) to a downstream server. For examp
`http://localhost:8080/resource`, then a header of `X-Forwarded-Ssl: on` to inform the server that the
original protocol was `https`.
-
[[x-forwarded-prefix]]
==== X-Forwarded-Prefix
diff --git a/framework-docs/modules/ROOT/partials/web/websocket-intro.adoc b/framework-docs/modules/ROOT/partials/web/websocket-intro.adoc
index 60c972a4147..e2a18e4c2f6 100644
--- a/framework-docs/modules/ROOT/partials/web/websocket-intro.adoc
+++ b/framework-docs/modules/ROOT/partials/web/websocket-intro.adoc
@@ -52,8 +52,6 @@ server. Likewise, if the application runs in a cloud environment, check the
instructions of the cloud provider related to WebSocket support.
-
-
[[http-versus-websocket]]
== HTTP Versus WebSocket
@@ -78,8 +76,6 @@ WebSocket clients and servers can negotiate the use of a higher-level, messaging
In the absence of that, they need to come up with their own conventions.
-
-
[[when-to-use-websockets]]
== When to Use WebSockets
diff --git a/spring-context/src/main/java/org/springframework/context/Lifecycle.java b/spring-context/src/main/java/org/springframework/context/Lifecycle.java
index 81a73fb58d5..12a2d0dd0e5 100644
--- a/spring-context/src/main/java/org/springframework/context/Lifecycle.java
+++ b/spring-context/src/main/java/org/springframework/context/Lifecycle.java
@@ -52,8 +52,8 @@ public interface Lifecycle {
/**
* Start this component.
* Should not throw an exception if the component is already running.
- *
In the case of a container, this will propagate the start signal to all
- * components that apply.
+ *
In the case of a container, this will propagate a hard start signal to all
+ * components that apply, even to non-auto-startup components.
* @see SmartLifecycle#isAutoStartup()
*/
void start();
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java
index 2b7e5df5c71..2e3fc8c0317 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java
@@ -47,11 +47,10 @@ public class SseEmitter extends ResponseBodyEmitter {
private static final MediaType TEXT_PLAIN = new MediaType("text", "plain", StandardCharsets.UTF_8);
- /**
- * Guards access to write operations on the response.
- */
+ /** Guards access to write operations on the response. */
private final Lock writeLock = new ReentrantLock();
+
/**
* Create a new SseEmitter instance.
*/