Skip to content

Commit 732f0a6

Browse files
berganderrstoyanchev
authored andcommitted
DefaultServletHttpRequestHandler supports DispatcherType.INCLUDE
See gh-30113
1 parent cc296c5 commit 732f0a6

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultServletHttpRequestHandler.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.IOException;
2020

21+
import jakarta.servlet.DispatcherType;
2122
import jakarta.servlet.RequestDispatcher;
2223
import jakarta.servlet.ServletContext;
2324
import jakarta.servlet.ServletException;
@@ -125,7 +126,12 @@ public void handleRequest(HttpServletRequest request, HttpServletResponse respon
125126
throw new IllegalStateException("A RequestDispatcher could not be located for the default servlet '" +
126127
this.defaultServletName + "'");
127128
}
128-
rd.forward(request, response);
129+
if (request.getDispatcherType() == DispatcherType.INCLUDE) {
130+
rd.include(request, response);
131+
}
132+
else {
133+
rd.forward(request, response);
134+
}
129135
}
130136

131137
}

spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurerTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.web.servlet.config.annotation;
1818

19+
import jakarta.servlet.DispatcherType;
1920
import jakarta.servlet.RequestDispatcher;
2021
import org.junit.jupiter.api.BeforeEach;
2122
import org.junit.jupiter.api.Test;
@@ -88,6 +89,24 @@ public void enableWithServletName() throws Exception {
8889
assertThat(response.getForwardedUrl()).as("The request was not forwarded").isEqualTo(expected);
8990
}
9091

92+
@Test
93+
public void handleIncludeRequest() throws Exception {
94+
configurer.enable();
95+
SimpleUrlHandlerMapping handlerMapping = configurer.buildHandlerMapping();
96+
DefaultServletHttpRequestHandler handler = (DefaultServletHttpRequestHandler) handlerMapping.getUrlMap().get("/**");
97+
98+
assertThat(handler).isNotNull();
99+
assertThat(handlerMapping.getOrder()).isEqualTo(Integer.MAX_VALUE);
100+
101+
MockHttpServletRequest request = new MockHttpServletRequest();
102+
request.setDispatcherType(DispatcherType.INCLUDE);
103+
handler.handleRequest(request, response);
104+
105+
String expected = "default";
106+
assertThat(servletContext.url).as("The ServletContext was not called with the default servlet name").isEqualTo(expected);
107+
assertThat(response.getIncludedUrl()).as("The request was not included").isEqualTo(expected);
108+
}
109+
91110

92111
private static class DispatchingMockServletContext extends MockServletContext {
93112

0 commit comments

Comments
 (0)