|
1 | 1 | package org.grails.plugins.web.controllers; |
2 | 2 |
|
3 | 3 | import grails.config.Settings; |
| 4 | +import grails.core.GrailsApplication; |
4 | 5 | import jakarta.servlet.DispatcherType; |
5 | 6 | import jakarta.servlet.Filter; |
6 | 7 | import jakarta.servlet.MultipartConfigElement; |
7 | 8 | import org.grails.web.config.http.GrailsFilters; |
8 | 9 | import org.grails.web.filters.HiddenHttpMethodFilter; |
| 10 | +import org.grails.web.servlet.mvc.GrailsDispatcherServlet; |
9 | 11 | import org.grails.web.servlet.mvc.GrailsWebRequestFilter; |
10 | 12 | import org.springframework.beans.factory.annotation.Value; |
11 | 13 | import org.springframework.boot.autoconfigure.AutoConfiguration; |
12 | 14 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
13 | 15 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
| 16 | +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletRegistrationBean; |
14 | 17 | import org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration; |
15 | 18 | import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; |
16 | 19 | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
17 | 20 | import org.springframework.boot.web.servlet.filter.OrderedCharacterEncodingFilter; |
18 | 21 | import org.springframework.context.ApplicationContext; |
19 | 22 | import org.springframework.context.annotation.Bean; |
| 23 | +import org.springframework.util.ClassUtils; |
20 | 24 | import org.springframework.web.filter.CharacterEncodingFilter; |
| 25 | +import org.springframework.web.servlet.DispatcherServlet; |
21 | 26 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
22 | 27 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
23 | 28 |
|
@@ -54,6 +59,9 @@ public class ControllersAutoConfiguration { |
54 | 59 | @Value("${" + Settings.CONTROLLERS_UPLOAD_FILE_SIZE_THRESHOLD + ":0}") |
55 | 60 | private int fileSizeThreshold; |
56 | 61 |
|
| 62 | + @Value("${" + Settings.WEB_SERVLET_PATH + ":#{null}}") |
| 63 | + String grailsServletPath; |
| 64 | + |
57 | 65 | @Bean |
58 | 66 | @ConditionalOnMissingBean(CharacterEncodingFilter.class) |
59 | 67 | public CharacterEncodingFilter characterEncodingFilter() { |
@@ -100,6 +108,24 @@ public MultipartConfigElement multipartConfigElement() { |
100 | 108 | return new MultipartConfigElement(uploadTmpDir, maxFileSize, maxRequestSize, fileSizeThreshold); |
101 | 109 | } |
102 | 110 |
|
| 111 | + @Bean |
| 112 | + public DispatcherServlet dispatcherServlet() { |
| 113 | + return new GrailsDispatcherServlet(); |
| 114 | + } |
| 115 | + |
| 116 | + @Bean |
| 117 | + public DispatcherServletRegistrationBean dispatcherServletRegistration(GrailsApplication application, DispatcherServlet dispatcherServlet, MultipartConfigElement multipartConfigElement) { |
| 118 | + if (grailsServletPath == null) { |
| 119 | + boolean isTomcat = ClassUtils.isPresent("org.apache.catalina.startup.Tomcat", application.getClassLoader()); |
| 120 | + grailsServletPath = isTomcat ? Settings.DEFAULT_TOMCAT_SERVLET_PATH : Settings.DEFAULT_WEB_SERVLET_PATH; |
| 121 | + } |
| 122 | + DispatcherServletRegistrationBean dispatcherServletRegistration = new DispatcherServletRegistrationBean(dispatcherServlet, grailsServletPath); |
| 123 | + dispatcherServletRegistration.setLoadOnStartup(2); |
| 124 | + dispatcherServletRegistration.setAsyncSupported(true); |
| 125 | + dispatcherServletRegistration.setMultipartConfig(multipartConfigElement); |
| 126 | + return dispatcherServletRegistration; |
| 127 | + } |
| 128 | + |
103 | 129 | @Bean |
104 | 130 | public GrailsWebMvcConfigurer webMvcConfig() { |
105 | 131 | return new GrailsWebMvcConfigurer(resourcesCachePeriod, resourcesEnabled, resourcesPattern); |
|
0 commit comments