use of jakarta.servlet.ServletContext in project spring-framework by spring-projects.
the class ControllerIntegrationTests method verifyRootWacSupport.
@Test
void verifyRootWacSupport() {
assertThat(foo).isEqualTo("foo");
assertThat(bar).isEqualTo("bar");
ApplicationContext parent = wac.getParent();
assertThat(parent).isNotNull();
boolean condition = parent instanceof WebApplicationContext;
assertThat(condition).isTrue();
WebApplicationContext root = (WebApplicationContext) parent;
assertThat(root.getBeansOfType(String.class).containsKey("bar")).isFalse();
ServletContext childServletContext = wac.getServletContext();
assertThat(childServletContext).isNotNull();
ServletContext rootServletContext = root.getServletContext();
assertThat(rootServletContext).isNotNull();
assertThat(rootServletContext).isSameAs(childServletContext);
assertThat(rootServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).isSameAs(root);
assertThat(childServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).isSameAs(root);
}
use of jakarta.servlet.ServletContext in project spring-framework by spring-projects.
the class DispatcherWacRootWacEarTests method verifyDispatcherWacConfig.
@Test
void verifyDispatcherWacConfig() {
ApplicationContext parent = wac.getParent();
assertThat(parent).isNotNull();
boolean condition = parent instanceof WebApplicationContext;
assertThat(condition).isTrue();
ApplicationContext grandParent = parent.getParent();
assertThat(grandParent).isNotNull();
boolean condition1 = grandParent instanceof WebApplicationContext;
assertThat(condition1).isFalse();
ServletContext dispatcherServletContext = wac.getServletContext();
assertThat(dispatcherServletContext).isNotNull();
ServletContext rootServletContext = ((WebApplicationContext) parent).getServletContext();
assertThat(rootServletContext).isNotNull();
assertThat(rootServletContext).isSameAs(dispatcherServletContext);
assertThat(rootServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).isSameAs(parent);
assertThat(dispatcherServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).isSameAs(parent);
assertThat(ear).isEqualTo("ear");
assertThat(root).isEqualTo("root");
assertThat(dispatcher).isEqualTo("dispatcher");
}
use of jakarta.servlet.ServletContext in project spring-framework by spring-projects.
the class WebApplicationObjectSupport method getServletContext.
/**
* Return the current ServletContext.
* @throws IllegalStateException if not running within a required ServletContext
* @see #isContextRequired()
*/
@Nullable
protected final ServletContext getServletContext() throws IllegalStateException {
if (this.servletContext != null) {
return this.servletContext;
}
ServletContext servletContext = null;
WebApplicationContext wac = getWebApplicationContext();
if (wac != null) {
servletContext = wac.getServletContext();
}
if (servletContext == null && isContextRequired()) {
throw new IllegalStateException("WebApplicationObjectSupport instance [" + this + "] does not run within a ServletContext. Make sure the object is fully configured!");
}
return servletContext;
}
use of jakarta.servlet.ServletContext in project spring-framework by spring-projects.
the class JettyRequestUpgradeStrategy method upgrade.
@Override
public Mono<Void> upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol, Supplier<HandshakeInfo> handshakeInfoFactory) {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
HttpServletRequest servletRequest = ServerHttpRequestDecorator.getNativeRequest(request);
HttpServletResponse servletResponse = ServerHttpResponseDecorator.getNativeResponse(response);
ServletContext servletContext = servletRequest.getServletContext();
HandshakeInfo handshakeInfo = handshakeInfoFactory.get();
DataBufferFactory factory = response.bufferFactory();
// Trigger WebFlux preCommit actions before upgrade
return exchange.getResponse().setComplete().then(Mono.deferContextual(contextView -> {
JettyWebSocketHandlerAdapter adapter = new JettyWebSocketHandlerAdapter(ContextWebSocketHandler.decorate(handler, contextView), session -> new JettyWebSocketSession(session, handshakeInfo, factory));
JettyWebSocketCreator webSocketCreator = (upgradeRequest, upgradeResponse) -> {
if (subProtocol != null) {
upgradeResponse.setAcceptedSubProtocol(subProtocol);
}
return adapter;
};
JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
try {
container.upgrade(webSocketCreator, servletRequest, servletResponse);
} catch (Exception ex) {
return Mono.error(ex);
}
return Mono.empty();
}));
}
use of jakarta.servlet.ServletContext in project spring-framework by spring-projects.
the class AbstractGenericWebContextLoader method configureWebResources.
/**
* Configures web resources for the supplied web application context (WAC).
* <h4>Implementation Details</h4>
* <p>If the supplied WAC has no parent or its parent is not a WAC, the
* supplied WAC will be configured as the Root WAC (see "<em>Root WAC
* Configuration</em>" below).
* <p>Otherwise the context hierarchy of the supplied WAC will be traversed
* to find the top-most WAC (i.e., the root); and the {@link ServletContext}
* of the Root WAC will be set as the {@code ServletContext} for the supplied
* WAC.
* <h4>Root WAC Configuration</h4>
* <ul>
* <li>The resource base path is retrieved from the supplied
* {@code WebMergedContextConfiguration}.</li>
* <li>A {@link ResourceLoader} is instantiated for the {@link MockServletContext}:
* if the resource base path is prefixed with "{@code classpath:}", a
* {@link DefaultResourceLoader} will be used; otherwise, a
* {@link FileSystemResourceLoader} will be used.</li>
* <li>A {@code MockServletContext} will be created using the resource base
* path and resource loader.</li>
* <li>The supplied {@link GenericWebApplicationContext} is then stored in
* the {@code MockServletContext} under the
* {@link WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE} key.</li>
* <li>Finally, the {@code MockServletContext} is set in the
* {@code WebApplicationContext}.</li>
* </ul>
* @param context the web application context for which to configure the web resources
* @param webMergedConfig the merged context configuration to use to load the web application context
*/
protected void configureWebResources(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) {
ApplicationContext parent = context.getParent();
// set the current context as the root WebApplicationContext:
if (!(parent instanceof WebApplicationContext)) {
String resourceBasePath = webMergedConfig.getResourceBasePath();
ResourceLoader resourceLoader = (resourceBasePath.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX) ? new DefaultResourceLoader() : new FileSystemResourceLoader());
ServletContext servletContext = new MockServletContext(resourceBasePath, resourceLoader);
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
context.setServletContext(servletContext);
} else {
ServletContext servletContext = null;
// Find the root WebApplicationContext
while (parent != null) {
if (parent instanceof WebApplicationContext && !(parent.getParent() instanceof WebApplicationContext)) {
servletContext = ((WebApplicationContext) parent).getServletContext();
break;
}
parent = parent.getParent();
}
Assert.state(servletContext != null, "Failed to find root WebApplicationContext in the context hierarchy");
context.setServletContext(servletContext);
}
}
Aggregations