diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java index d2ed439e4e..b98d3740b4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java @@ -126,11 +126,11 @@ public class DefaultServletHttpRequestHandler implements HttpRequestHandler, Ser throw new IllegalStateException("A RequestDispatcher could not be located for the default servlet '" + this.defaultServletName + "'"); } - if (request.getDispatcherType() == DispatcherType.INCLUDE) { - rd.include(request, response); + if (request.getDispatcherType() != DispatcherType.INCLUDE) { + rd.forward(request, response); } else { - rd.forward(request, response); + rd.include(request, response); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java index 1cc33984b9..986fc067ad 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import jakarta.servlet.RequestDispatcher; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.web.HttpRequestHandler; import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; @@ -60,51 +61,57 @@ public class DefaultServletHandlerConfigurerTests { @Test public void enable() throws Exception { configurer.enable(); - SimpleUrlHandlerMapping handlerMapping = configurer.buildHandlerMapping(); - DefaultServletHttpRequestHandler handler = (DefaultServletHttpRequestHandler) handlerMapping.getUrlMap().get("/**"); + SimpleUrlHandlerMapping mapping = configurer.buildHandlerMapping(); + HttpRequestHandler handler = (DefaultServletHttpRequestHandler) mapping.getUrlMap().get("/**"); assertThat(handler).isNotNull(); - assertThat(handlerMapping.getOrder()).isEqualTo(Integer.MAX_VALUE); + assertThat(mapping.getOrder()).isEqualTo(Integer.MAX_VALUE); handler.handleRequest(new MockHttpServletRequest(), response); - String expected = "default"; - assertThat(servletContext.url).as("The ServletContext was not called with the default servlet name").isEqualTo(expected); - assertThat(response.getForwardedUrl()).as("The request was not forwarded").isEqualTo(expected); + assertThat(servletContext.url) + .as("The ServletContext was not called with the default servlet name").isEqualTo("default"); + + assertThat(response.getForwardedUrl()) + .as("The request was not forwarded").isEqualTo("default"); } @Test public void enableWithServletName() throws Exception { configurer.enable("defaultServlet"); - SimpleUrlHandlerMapping handlerMapping = configurer.buildHandlerMapping(); - DefaultServletHttpRequestHandler handler = (DefaultServletHttpRequestHandler) handlerMapping.getUrlMap().get("/**"); + SimpleUrlHandlerMapping mapping = configurer.buildHandlerMapping(); + HttpRequestHandler handler = (DefaultServletHttpRequestHandler) mapping.getUrlMap().get("/**"); assertThat(handler).isNotNull(); - assertThat(handlerMapping.getOrder()).isEqualTo(Integer.MAX_VALUE); + assertThat(mapping.getOrder()).isEqualTo(Integer.MAX_VALUE); handler.handleRequest(new MockHttpServletRequest(), response); - String expected = "defaultServlet"; - assertThat(servletContext.url).as("The ServletContext was not called with the default servlet name").isEqualTo(expected); - assertThat(response.getForwardedUrl()).as("The request was not forwarded").isEqualTo(expected); + assertThat(servletContext.url) + .as("The ServletContext was not called with the default servlet name").isEqualTo("defaultServlet"); + + assertThat(response.getForwardedUrl()) + .as("The request was not forwarded").isEqualTo("defaultServlet"); } - @Test + @Test // gh-30113 public void handleIncludeRequest() throws Exception { configurer.enable(); - SimpleUrlHandlerMapping handlerMapping = configurer.buildHandlerMapping(); - DefaultServletHttpRequestHandler handler = (DefaultServletHttpRequestHandler) handlerMapping.getUrlMap().get("/**"); + SimpleUrlHandlerMapping mapping = configurer.buildHandlerMapping(); + HttpRequestHandler handler = (DefaultServletHttpRequestHandler) mapping.getUrlMap().get("/**"); assertThat(handler).isNotNull(); - assertThat(handlerMapping.getOrder()).isEqualTo(Integer.MAX_VALUE); + assertThat(mapping.getOrder()).isEqualTo(Integer.MAX_VALUE); MockHttpServletRequest request = new MockHttpServletRequest(); request.setDispatcherType(DispatcherType.INCLUDE); handler.handleRequest(request, response); - String expected = "default"; - assertThat(servletContext.url).as("The ServletContext was not called with the default servlet name").isEqualTo(expected); - assertThat(response.getIncludedUrl()).as("The request was not included").isEqualTo(expected); + assertThat(servletContext.url) + .as("The ServletContext was not called with the default servlet name").isEqualTo("default"); + + assertThat(response.getIncludedUrl()) + .as("The request was not included").isEqualTo("default"); }