diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java index 22cb9f295c..d2d137a7bc 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java @@ -36,7 +36,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.web.HttpMessageConverters; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.ErrorPage; @@ -76,16 +76,16 @@ public class EndpointWebMvcChildContextConfiguration { private ManagementServerProperties managementServerProperties; @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { + public void customize(ConfigurableEmbeddedServletContainer container) { if (this.managementServerProperties == null) { this.managementServerProperties = BeanFactoryUtils .beanOfTypeIncludingAncestors(this.beanFactory, ManagementServerProperties.class); } - factory.setPort(this.managementServerProperties.getPort()); - factory.setAddress(this.managementServerProperties.getAddress()); - factory.setContextPath(this.managementServerProperties.getContextPath()); - factory.addErrorPages(new ErrorPage(this.errorPath)); + container.setPort(this.managementServerProperties.getPort()); + container.setAddress(this.managementServerProperties.getAddress()); + container.setContextPath(this.managementServerProperties.getContextPath()); + container.addErrorPages(new ErrorPage(this.errorPath)); } } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java index 42af480d46..502e0bc425 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ErrorMvcAutoConfiguration.java @@ -37,7 +37,7 @@ import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.condition.SpringBootCondition; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.DefaultTemplateResolverConfiguration; import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.ErrorPage; import org.springframework.context.annotation.Bean; @@ -80,8 +80,8 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom } @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { - factory.addErrorPages(new ErrorPage(this.errorPath)); + public void customize(ConfigurableEmbeddedServletContainer container) { + container.addErrorPages(new ErrorPage(this.errorPath)); } @Configuration diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index d76c459cb0..2a990948fc 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -27,7 +27,7 @@ import org.apache.catalina.valves.AccessLogValve; import org.apache.catalina.valves.RemoteIpValve; import org.apache.coyote.AbstractProtocol; import org.apache.coyote.ProtocolHandler; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; @@ -110,22 +110,22 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer { } @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { - Integer port = getPort(); - if (port != null) { - factory.setPort(port); + public void customize(ConfigurableEmbeddedServletContainer container) { + if (getPort() != null) { + container.setPort(getPort()); } if (getAddress() != null) { - factory.setAddress(getAddress()); + container.setAddress(getAddress()); } if (getContextPath() != null) { - factory.setContextPath(getContextPath()); + container.setContextPath(getContextPath()); } if (getSessionTimeout() != null) { - factory.setSessionTimeout(getSessionTimeout()); + container.setSessionTimeout(getSessionTimeout()); } - if (factory instanceof TomcatEmbeddedServletContainerFactory) { - getTomcat().customizeTomcat((TomcatEmbeddedServletContainerFactory) factory); + if (container instanceof TomcatEmbeddedServletContainerFactory) { + getTomcat() + .customizeTomcat((TomcatEmbeddedServletContainerFactory) container); } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java index c4740faff7..3ad3597858 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.java @@ -21,7 +21,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.SearchStrategy; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; @@ -33,7 +33,7 @@ import org.springframework.util.StringUtils; /** * {@link EnableAutoConfiguration Auto-configuration} that configures the - * {@link ConfigurableEmbeddedServletContainerFactory} from a {@link ServerProperties} + * {@link ConfigurableEmbeddedServletContainer} from a {@link ServerProperties} * bean. * * @author Dave Syer @@ -59,7 +59,7 @@ public class ServerPropertiesAutoConfiguration implements ApplicationContextAwar } @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { + public void customize(ConfigurableEmbeddedServletContainer container) { // ServerProperties handles customization, this just checks we only have // a single bean String[] serverPropertiesBeans = this.applicationContext diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfigurationTests.java index 95235db16a..7767d867c9 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfigurationTests.java @@ -25,7 +25,7 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.MockEmbeddedServletContainerFactory; @@ -211,7 +211,7 @@ public class EmbeddedServletContainerAutoConfigurationTests { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof ConfigurableEmbeddedServletContainerFactory) { + if (bean instanceof ConfigurableEmbeddedServletContainer) { MockEmbeddedServletContainerFactory containerFactory = (MockEmbeddedServletContainerFactory) bean; assertNull(containerFactory.getServletContext()); } @@ -229,8 +229,8 @@ public class EmbeddedServletContainerAutoConfigurationTests { public static class CallbackEmbeddedContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { - factory.setPort(9000); + public void customize(ConfigurableEmbeddedServletContainer container) { + container.setPort(9000); } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfigurationTests.java index 481c785ff6..c78092ca03 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfigurationTests.java @@ -27,7 +27,7 @@ import org.mockito.Mockito; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; @@ -177,9 +177,10 @@ public class ServerPropertiesAutoConfigurationTests { return new EmbeddedServletContainerCustomizer() { @Override - public void customize(ConfigurableEmbeddedServletContainerFactory factory) { - factory.setPort(3000); + public void customize(ConfigurableEmbeddedServletContainer container) { + container.setPort(3000); } + }; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index 5524db4b4f..17f55d6637 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -24,7 +24,7 @@ import java.util.Map; import org.junit.Test; import org.springframework.beans.MutablePropertyValues; import org.springframework.boot.bind.RelaxedDataBinder; -import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -73,14 +73,14 @@ public class ServerPropertiesTests { @Test public void testCustomizeTomcat() throws Exception { - ConfigurableEmbeddedServletContainerFactory factory = mock(ConfigurableEmbeddedServletContainerFactory.class); + ConfigurableEmbeddedServletContainer factory = mock(ConfigurableEmbeddedServletContainer.class); this.properties.customize(factory); verify(factory).setContextPath(""); } @Test public void testCustomizeTomcatPort() throws Exception { - ConfigurableEmbeddedServletContainerFactory factory = mock(ConfigurableEmbeddedServletContainerFactory.class); + ConfigurableEmbeddedServletContainer factory = mock(ConfigurableEmbeddedServletContainer.class); this.properties.setPort(8080); this.properties.customize(factory); verify(factory).setPort(8080); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java new file mode 100644 index 0000000000..f7c584f497 --- /dev/null +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java @@ -0,0 +1,273 @@ +/* + * Copyright 2012-2013 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.context.embedded; + +import java.io.File; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import org.springframework.util.Assert; + +/** + * Abstract base class for {@link ConfigurableEmbeddedServletContainer} implementations. + * + * @author Phillip Webb + * @author Dave Syer + * @see AbstractEmbeddedServletContainerFactory + */ +public abstract class AbstractConfigurableEmbeddedServletContainer implements + ConfigurableEmbeddedServletContainer { + + private String contextPath = ""; + + private boolean registerDefaultServlet = true; + + private boolean registerJspServlet = true; + + private String jspServletClassName = "org.apache.jasper.servlet.JspServlet"; + + private int port = 8080; + + private List initializers = new ArrayList(); + + private File documentRoot; + + private Set errorPages = new LinkedHashSet(); + + private MimeMappings mimeMappings = new MimeMappings(MimeMappings.DEFAULT); + + private InetAddress address; + + private int sessionTimeout; + + /** + * Create a new {@link AbstractConfigurableEmbeddedServletContainer} instance. + */ + public AbstractConfigurableEmbeddedServletContainer() { + } + + /** + * Create a new {@link AbstractConfigurableEmbeddedServletContainer} instance with the + * specified port. + * @param port the port number for the embedded servlet container + */ + public AbstractConfigurableEmbeddedServletContainer(int port) { + this.port = port; + } + + /** + * Create a new {@link AbstractConfigurableEmbeddedServletContainer} instance with the + * specified context path and port. + * @param contextPath the context path for the embedded servlet container + * @param port the port number for the embedded servlet container + */ + public AbstractConfigurableEmbeddedServletContainer(String contextPath, int port) { + checkContextPath(contextPath); + this.contextPath = contextPath; + this.port = port; + } + + @Override + public void setContextPath(String contextPath) { + checkContextPath(contextPath); + this.contextPath = contextPath; + } + + private void checkContextPath(String contextPath) { + Assert.notNull(contextPath, "ContextPath must not be null"); + if (contextPath.length() > 0) { + if ("/".equals(contextPath)) { + throw new IllegalArgumentException( + "Root ContextPath must be specified using an empty string"); + } + if (!contextPath.startsWith("/") || contextPath.endsWith("/")) { + throw new IllegalArgumentException( + "ContextPath must start with '/ and not end with '/'"); + } + } + } + + /** + * Returns the context path for the embedded servlet container. The path will start + * with "/" and not end with "/". The root context is represented by an empty string. + */ + public String getContextPath() { + return this.contextPath; + } + + @Override + public void setPort(int port) { + this.port = port; + } + + /** + * The port that the embedded server listens on. + * @return the port + */ + public int getPort() { + return this.port; + } + + @Override + public void setAddress(InetAddress address) { + this.address = address; + } + + /** + * @return the address the embedded container binds to + */ + public InetAddress getAddress() { + return this.address; + } + + @Override + public void setSessionTimeout(int sessionTimeout) { + this.sessionTimeout = sessionTimeout; + } + + @Override + public void setSessionTimeout(int sessionTimeout, TimeUnit timeUnit) { + Assert.notNull(timeUnit, "TimeUnit must not be null"); + this.sessionTimeout = (int) timeUnit.toSeconds(sessionTimeout); + } + + /** + * @return the session timeout in seconds + */ + public int getSessionTimeout() { + return this.sessionTimeout; + } + + @Override + public void setInitializers(List initializers) { + Assert.notNull(initializers, "Initializers must not be null"); + this.initializers = new ArrayList(initializers); + } + + @Override + public void addInitializers(ServletContextInitializer... initializers) { + Assert.notNull(initializers, "Initializers must not be null"); + this.initializers.addAll(Arrays.asList(initializers)); + } + + @Override + public void setDocumentRoot(File documentRoot) { + this.documentRoot = documentRoot; + } + + /** + * Returns the document root which will be used by the web context to serve static + * files. + */ + public File getDocumentRoot() { + return this.documentRoot; + } + + @Override + public void setErrorPages(Set errorPages) { + Assert.notNull(errorPages, "ErrorPages must not be null"); + this.errorPages = new LinkedHashSet(errorPages); + } + + @Override + public void addErrorPages(ErrorPage... errorPages) { + Assert.notNull(errorPages, "ErrorPages must not be null"); + this.errorPages.addAll(Arrays.asList(errorPages)); + } + + /** + * Returns a mutable set of {@link ErrorPage}s that will be used when handling + * exceptions. + */ + public Set getErrorPages() { + return this.errorPages; + } + + @Override + public void setMimeMappings(MimeMappings mimeMappings) { + this.mimeMappings = new MimeMappings(mimeMappings); + } + + /** + * Returns the mime-type mappings. + * @return the mimeMappings the mime-type mappings. + */ + public MimeMappings getMimeMappings() { + return this.mimeMappings; + } + + @Override + public void setRegisterDefaultServlet(boolean registerDefaultServlet) { + this.registerDefaultServlet = registerDefaultServlet; + } + + /** + * Flag to indicate that the JSP servlet should be registered if available on the + * classpath. + * @return true if the JSP servlet is to be registered + */ + public boolean isRegisterJspServlet() { + return this.registerJspServlet; + } + + @Override + public void setRegisterJspServlet(boolean registerJspServlet) { + this.registerJspServlet = registerJspServlet; + } + + /** + * Flag to indicate that the default servlet should be registered. + * @return true if the default servlet is to be registered + */ + public boolean isRegisterDefaultServlet() { + return this.registerDefaultServlet; + } + + @Override + public void setJspServletClassName(String jspServletClassName) { + this.jspServletClassName = jspServletClassName; + } + + /** + * @return the JSP servlet class name + */ + protected String getJspServletClassName() { + return this.jspServletClassName; + } + + /** + * Utility method that can be used by subclasses wishing to combine the specified + * {@link ServletContextInitializer} parameters with those defined in this instance. + * @param initializers the initializers to merge + * @return a complete set of merged initializers (with the specified parameters + * appearing first) + */ + protected final ServletContextInitializer[] mergeInitializers( + ServletContextInitializer... initializers) { + List mergedInitializers = new ArrayList(); + mergedInitializers.addAll(Arrays.asList(initializers)); + mergedInitializers.addAll(this.initializers); + return mergedInitializers + .toArray(new ServletContextInitializer[mergedInitializers.size()]); + } + +} diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactory.java index 767a101fe5..fcbbbbf7cb 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactory.java @@ -18,21 +18,14 @@ package org.springframework.boot.context.embedded; import java.io.File; import java.io.IOException; -import java.net.InetAddress; import java.net.JarURLConnection; import java.net.URL; import java.net.URLConnection; import java.security.CodeSource; -import java.util.ArrayList; import java.util.Arrays; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.util.Assert; /** * Abstract base class for {@link EmbeddedServletContainerFactory} implementations. @@ -40,255 +33,25 @@ import org.springframework.util.Assert; * @author Phillip Webb * @author Dave Syer */ -public abstract class AbstractEmbeddedServletContainerFactory implements - EmbeddedServletContainerFactory, ConfigurableEmbeddedServletContainerFactory { +public abstract class AbstractEmbeddedServletContainerFactory extends + AbstractConfigurableEmbeddedServletContainer implements + EmbeddedServletContainerFactory { + + protected final Log logger = LogFactory.getLog(getClass()); private static final String[] COMMON_DOC_ROOTS = { "src/main/webapp", "public", "static" }; - protected final Log logger = LogFactory.getLog(getClass()); - - private String contextPath = ""; - - private boolean registerDefaultServlet = true; - - private boolean registerJspServlet = true; - - private String jspServletClassName = "org.apache.jasper.servlet.JspServlet"; - - private int port = 8080; - - private List initializers = new ArrayList(); - - private File documentRoot; - - private Set errorPages = new LinkedHashSet(); - - private MimeMappings mimeMappings = new MimeMappings(MimeMappings.DEFAULT); - - private InetAddress address; - - private int sessionTimeout; - - /** - * Create a new {@link AbstractEmbeddedServletContainerFactory} instance. - */ public AbstractEmbeddedServletContainerFactory() { + super(); } - /** - * Create a new {@link AbstractEmbeddedServletContainerFactory} instance with the - * specified port. - * @param port the port number for the embedded servlet container - */ public AbstractEmbeddedServletContainerFactory(int port) { - this.port = port; + super(port); } - /** - * Create a new {@link AbstractEmbeddedServletContainerFactory} instance with the - * specified context path and port. - * @param contextPath the context path for the embedded servlet container - * @param port the port number for the embedded servlet container - */ public AbstractEmbeddedServletContainerFactory(String contextPath, int port) { - checkContextPath(contextPath); - this.contextPath = contextPath; - this.port = port; - } - - @Override - public void setContextPath(String contextPath) { - checkContextPath(contextPath); - this.contextPath = contextPath; - } - - private void checkContextPath(String contextPath) { - Assert.notNull(contextPath, "ContextPath must not be null"); - if (contextPath.length() > 0) { - if ("/".equals(contextPath)) { - throw new IllegalArgumentException( - "Root ContextPath must be specified using an empty string"); - } - if (!contextPath.startsWith("/") || contextPath.endsWith("/")) { - throw new IllegalArgumentException( - "ContextPath must start with '/ and not end with '/'"); - } - } - } - - /** - * Returns the context path for the embedded servlet container. The path will start - * with "/" and not end with "/". The root context is represented by an empty string. - */ - public String getContextPath() { - return this.contextPath; - } - - @Override - public void setPort(int port) { - this.port = port; - } - - /** - * The port that the embedded server listens on. - * @return the port - */ - public int getPort() { - return this.port; - } - - @Override - public void setAddress(InetAddress address) { - this.address = address; - } - - /** - * @return the address the embedded container binds to - */ - public InetAddress getAddress() { - return this.address; - } - - @Override - public void setSessionTimeout(int sessionTimeout) { - this.sessionTimeout = sessionTimeout; - } - - @Override - public void setSessionTimeout(int sessionTimeout, TimeUnit timeUnit) { - Assert.notNull(timeUnit, "TimeUnit must not be null"); - this.sessionTimeout = (int) timeUnit.toSeconds(sessionTimeout); - } - - /** - * @return the session timeout in seconds - */ - public int getSessionTimeout() { - return this.sessionTimeout; - } - - @Override - public void setInitializers(List initializers) { - Assert.notNull(initializers, "Initializers must not be null"); - this.initializers = new ArrayList(initializers); - } - - @Override - public void addInitializers(ServletContextInitializer... initializers) { - Assert.notNull(initializers, "Initializers must not be null"); - this.initializers.addAll(Arrays.asList(initializers)); - } - - /** - * Returns a mutable list of {@link ServletContextInitializer} that should be applied - * in addition to {@link #getEmbeddedServletContainer(ServletContextInitializer...)} - * parameters. - * @return the initializers - */ - public List getInitializers() { - return this.initializers; - } - - @Override - public void setDocumentRoot(File documentRoot) { - this.documentRoot = documentRoot; - } - - /** - * Returns the document root which will be used by the web context to serve static - * files. - */ - public File getDocumentRoot() { - return this.documentRoot; - } - - @Override - public void setErrorPages(Set errorPages) { - Assert.notNull(errorPages, "ErrorPages must not be null"); - this.errorPages = new LinkedHashSet(errorPages); - } - - @Override - public void addErrorPages(ErrorPage... errorPages) { - Assert.notNull(errorPages, "ErrorPages must not be null"); - this.errorPages.addAll(Arrays.asList(errorPages)); - } - - /** - * Returns a mutable set of {@link ErrorPage}s that will be used when handling - * exceptions. - */ - public Set getErrorPages() { - return this.errorPages; - } - - @Override - public void setMimeMappings(MimeMappings mimeMappings) { - this.mimeMappings = new MimeMappings(mimeMappings); - } - - /** - * Returns the mime-type mappings. - * @return the mimeMappings the mime-type mappings. - */ - public MimeMappings getMimeMappings() { - return this.mimeMappings; - } - - @Override - public void setRegisterDefaultServlet(boolean registerDefaultServlet) { - this.registerDefaultServlet = registerDefaultServlet; - } - - /** - * Flag to indicate that the JSP servlet should be registered if available on the - * classpath. - * @return true if the JSP servlet is to be registered - */ - public boolean isRegisterJspServlet() { - return this.registerJspServlet; - } - - @Override - public void setRegisterJspServlet(boolean registerJspServlet) { - this.registerJspServlet = registerJspServlet; - } - - /** - * Flag to indicate that the default servlet should be registered. - * @return true if the default servlet is to be registered - */ - public boolean isRegisterDefaultServlet() { - return this.registerDefaultServlet; - } - - @Override - public void setJspServletClassName(String jspServletClassName) { - this.jspServletClassName = jspServletClassName; - } - - /** - * @return the JSP servlet class name - */ - protected String getJspServletClassName() { - return this.jspServletClassName; - } - - /** - * Utility method that can be used by subclasses wishing to combine the specified - * {@link ServletContextInitializer} parameters with those defined in this instance. - * @param initializers the initializers to merge - * @return a complete set of merged initializers (with the specified parameters - * appearing first) - */ - protected final ServletContextInitializer[] mergeInitializers( - ServletContextInitializer... initializers) { - List mergedInitializers = new ArrayList(); - mergedInitializers.addAll(Arrays.asList(initializers)); - mergedInitializers.addAll(getInitializers()); - return mergedInitializers - .toArray(new ServletContextInitializer[mergedInitializers.size()]); + super(contextPath, port); } /** diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java similarity index 98% rename from spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainerFactory.java rename to spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java index ff8073780f..59c3ce9555 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java @@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit; * @see EmbeddedServletContainerFactory * @see EmbeddedServletContainerCustomizer */ -public interface ConfigurableEmbeddedServletContainerFactory { +public interface ConfigurableEmbeddedServletContainer { /** * Sets the context path for the embedded servlet container. The context should start diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizer.java index a82930ed52..df1cee528a 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizer.java @@ -35,9 +35,9 @@ import org.springframework.beans.factory.config.BeanPostProcessor; public interface EmbeddedServletContainerCustomizer { /** - * Customize the specified {@link ConfigurableEmbeddedServletContainerFactory}. - * @param factory the factory to customize + * Customize the specified {@link ConfigurableEmbeddedServletContainer}. + * @param container the container to customize */ - void customize(ConfigurableEmbeddedServletContainerFactory factory); + void customize(ConfigurableEmbeddedServletContainer container); } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java index 860598bc2b..0f9fb30f82 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java @@ -29,7 +29,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; /** * {@link BeanPostProcessor} that apply all {@link EmbeddedServletContainerCustomizer}s - * from the bean factory to {@link ConfigurableEmbeddedServletContainerFactory} beans. + * from the bean factory to {@link ConfigurableEmbeddedServletContainer} beans. * * @author Dave Syer * @author Phillip Webb @@ -50,8 +50,8 @@ public class EmbeddedServletContainerCustomizerBeanPostProcessor implements @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof ConfigurableEmbeddedServletContainerFactory) { - postProcessBeforeInitialization((ConfigurableEmbeddedServletContainerFactory) bean); + if (bean instanceof ConfigurableEmbeddedServletContainer) { + postProcessBeforeInitialization((ConfigurableEmbeddedServletContainer) bean); } return bean; } @@ -63,7 +63,7 @@ public class EmbeddedServletContainerCustomizerBeanPostProcessor implements } private void postProcessBeforeInitialization( - ConfigurableEmbeddedServletContainerFactory bean) { + ConfigurableEmbeddedServletContainer bean) { for (EmbeddedServletContainerCustomizer customizer : getCustomizers()) { customizer.customize(bean); }