diff --git a/pom.xml b/pom.xml
index aa58b1d2e9..924bd96ade 100644
--- a/pom.xml
+++ b/pom.xml
@@ -109,6 +109,7 @@
spring-autowire
spring-batch
spring-boot
+ spring-boot-servlet
spring-cloud-data-flow
spring-cloud
spring-core
diff --git a/spring-boot-servlet/.gitignore b/spring-boot-servlet/.gitignore
new file mode 100644
index 0000000000..60be5b80aa
--- /dev/null
+++ b/spring-boot-servlet/.gitignore
@@ -0,0 +1,4 @@
+/target/
+.settings/
+.classpath
+.project
diff --git a/spring-boot-servlet/README.md b/spring-boot-servlet/README.md
new file mode 100644
index 0000000000..262a11fc36
--- /dev/null
+++ b/spring-boot-servlet/README.md
@@ -0,0 +1,2 @@
+###Relevant Articles:
+- [How to Register a Servlet in a Java Web Application](http://www.baeldung.com/how-to-register-a-servlet-in-a-java-web-application/)
\ No newline at end of file
diff --git a/spring-boot-servlet/pom.xml b/spring-boot-servlet/pom.xml
new file mode 100644
index 0000000000..3818e3468f
--- /dev/null
+++ b/spring-boot-servlet/pom.xml
@@ -0,0 +1,55 @@
+
+ 4.0.0
+ com.baeldung
+ spring-boot-servlet
+ 0.0.1-SNAPSHOT
+ war
+ spring-boot-servlet
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 1.5.1.RELEASE
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+ ${tomcat.version}
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-jasper
+ ${tomcat.version}
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+ UTF-8
+ 1.8
+ 8.5.11
+
+
+
diff --git a/spring-boot-servlet/src/main/java/META-INF/MANIFEST.MF b/spring-boot-servlet/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..69ebae1751
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Main-Class: com.baeldung.ApplicationMain
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/ApplicationMain.java b/spring-boot-servlet/src/main/java/com/baeldung/ApplicationMain.java
new file mode 100644
index 0000000000..66f2e85999
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/ApplicationMain.java
@@ -0,0 +1,19 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.support.SpringBootServletInitializer;
+
+@SpringBootApplication
+public class ApplicationMain extends SpringBootServletInitializer {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ApplicationMain.class, args);
+ }
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(ApplicationMain.class);
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebAppInitializer.java b/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebAppInitializer.java
new file mode 100644
index 0000000000..b7e22500f4
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebAppInitializer.java
@@ -0,0 +1,32 @@
+package com.baeldung.configuration;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+public class WebAppInitializer implements WebApplicationInitializer {
+
+ public void onStartup(ServletContext container) throws ServletException {
+
+ AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
+ ctx.register(WebMvcConfigure.class);
+ ctx.setServletContext(container);
+
+ ServletRegistration.Dynamic servletOne = container.addServlet("SpringProgrammaticDispatcherServlet", new DispatcherServlet(ctx));
+ servletOne.setLoadOnStartup(1);
+ servletOne.addMapping("/");
+
+ XmlWebApplicationContext xctx = new XmlWebApplicationContext();
+ xctx.setConfigLocation("/WEB-INF/context.xml");
+ xctx.setServletContext(container);
+
+ ServletRegistration.Dynamic servletTwo = container.addServlet("SpringProgrammaticXMLDispatcherServlet", new DispatcherServlet(xctx));
+ servletTwo.setLoadOnStartup(1);
+ servletTwo.addMapping("/");
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebMvcConfigure.java b/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebMvcConfigure.java
new file mode 100644
index 0000000000..de9067de6e
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/configuration/WebMvcConfigure.java
@@ -0,0 +1,40 @@
+package com.baeldung.configuration;
+
+import org.springframework.boot.web.support.ErrorPageFilter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.ViewResolver;
+import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.resource.PathResourceResolver;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+
+@Configuration
+public class WebMvcConfigure extends WebMvcConfigurerAdapter {
+
+ @Bean
+ public ViewResolver getViewResolver() {
+ InternalResourceViewResolver resolver = new InternalResourceViewResolver();
+ resolver.setPrefix("/WEB-INF/");
+ resolver.setSuffix(".jsp");
+ return resolver;
+ }
+
+ @Override
+ public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
+ configurer.enable();
+ }
+
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(3600).resourceChain(true).addResolver(new PathResourceResolver());
+ }
+
+ @Bean
+ public ErrorPageFilter errorPageFilter() {
+ return new ErrorPageFilter();
+ }
+}
+
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/props/Constants.java b/spring-boot-servlet/src/main/java/com/baeldung/props/Constants.java
new file mode 100644
index 0000000000..421401eec7
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/props/Constants.java
@@ -0,0 +1,20 @@
+package com.baeldung.props;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Properties;
+
+public final class Constants {
+
+ @Autowired
+ PropertySourcesLoader psl;
+
+ public static final String breakLine = System.getProperty("line.separator");
+ private static final PropertyLoader pl = new PropertyLoader();
+ private static final Properties mainProps = pl.getProperties("custom.properties");
+ public static final String DISPATCHER_SERVLET_NAME = mainProps.getProperty("dispatcher.servlet.name");
+ public static final String DISPATCHER_SERVLET_MAPPING = mainProps.getProperty("dispatcher.servlet.mapping");
+ private final String EXAMPLE_SERVLET_NAME = psl.getProperty("example.servlet.name");
+ private final String EXAMPLE_SERVLET_MAPPING = psl.getProperty("example.servlet.mapping");
+
+}
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/props/PropertyLoader.java b/spring-boot-servlet/src/main/java/com/baeldung/props/PropertyLoader.java
new file mode 100644
index 0000000000..5d890d96fa
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/props/PropertyLoader.java
@@ -0,0 +1,27 @@
+package com.baeldung.props;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class PropertyLoader {
+ private static final Logger log = LoggerFactory.getLogger(PropertyLoader.class);
+
+ public Properties getProperties(String file) {
+ Properties prop = new Properties();
+ InputStream input = null;
+ try {
+ input = getClass().getResourceAsStream(file);
+ prop.load(input);
+ if (input != null) {
+ input.close();
+ }
+ } catch (IOException ex) {
+ log.error("IOException: " + ex);
+ }
+ return prop;
+ }
+}
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/props/PropertySourcesLoader.java b/spring-boot-servlet/src/main/java/com/baeldung/props/PropertySourcesLoader.java
new file mode 100644
index 0000000000..8c7b3a4af5
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/props/PropertySourcesLoader.java
@@ -0,0 +1,23 @@
+package com.baeldung.props;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.ConfigurableEnvironment;
+
+@Configuration
+@ComponentScan(basePackages = { "com.baeldung.*" })
+@PropertySource("classpath:custom.properties") public class PropertySourcesLoader {
+
+ private static final Logger log = LoggerFactory.getLogger(PropertySourcesLoader.class);
+
+ @Autowired
+ ConfigurableEnvironment env;
+
+ public String getProperty(String key) {
+ return env.getProperty(key);
+ }
+}
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/servlets/GenericCustomServlet.java b/spring-boot-servlet/src/main/java/com/baeldung/servlets/GenericCustomServlet.java
new file mode 100644
index 0000000000..c6543c9eef
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/servlets/GenericCustomServlet.java
@@ -0,0 +1,18 @@
+package com.baeldung.servlets;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class GenericCustomServlet extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ out.println("
Hello World
");
+ }
+}
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/AnnotationServlet.java b/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/AnnotationServlet.java
new file mode 100644
index 0000000000..d971e68cfa
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/AnnotationServlet.java
@@ -0,0 +1,20 @@
+package com.baeldung.servlets.javaee;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet(name = "AnnotationServlet",
+ description = "Example Servlet Using Annotations",
+ urlPatterns = { "/annotationservlet" })
+public class AnnotationServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ request.getRequestDispatcher("/annotationservlet.jsp").forward(request, response);
+ }
+}
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/EEWebXmlServlet.java b/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/EEWebXmlServlet.java
new file mode 100644
index 0000000000..4209e815cd
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/servlets/javaee/EEWebXmlServlet.java
@@ -0,0 +1,20 @@
+package com.baeldung.servlets.javaee;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class EEWebXmlServlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ out.println("Hello World
");
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/SpringRegistrationBeanServlet.java b/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/SpringRegistrationBeanServlet.java
new file mode 100644
index 0000000000..4a34465894
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/SpringRegistrationBeanServlet.java
@@ -0,0 +1,19 @@
+package com.baeldung.servlets.springboot;
+
+import com.baeldung.servlets.GenericCustomServlet;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SpringRegistrationBeanServlet {
+
+ @Bean
+ public ServletRegistrationBean genericCustomServlet() {
+ ServletRegistrationBean bean = new ServletRegistrationBean(new GenericCustomServlet(), "/springregistrationbeanservlet/*");
+ bean.setLoadOnStartup(1);
+ return bean;
+ }
+}
+
+
diff --git a/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/embedded/EmbeddedTomcatExample.java b/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/embedded/EmbeddedTomcatExample.java
new file mode 100644
index 0000000000..b2458f33c7
--- /dev/null
+++ b/spring-boot-servlet/src/main/java/com/baeldung/servlets/springboot/embedded/EmbeddedTomcatExample.java
@@ -0,0 +1,16 @@
+package com.baeldung.servlets.springboot.embedded;
+
+import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
+import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class EmbeddedTomcatExample {
+
+ @Bean
+ public EmbeddedServletContainerFactory servletContainer() {
+ TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
+ return tomcat;
+ }
+}
diff --git a/spring-boot-servlet/src/main/resources/application.properties b/spring-boot-servlet/src/main/resources/application.properties
new file mode 100644
index 0000000000..4e9e2b4cf1
--- /dev/null
+++ b/spring-boot-servlet/src/main/resources/application.properties
@@ -0,0 +1,10 @@
+#Server Configuration
+#server.port=8080
+#server.context-path=/javabootdata
+#Resource Handling
+#spring.resources.static-locations=classpath:/WEB-INF/resources
+#spring.mvc.view.prefix=/WEB-INF/
+#spring.mvc.view.suffix=.jsp
+#spring.resources.cache-period=3600
+servlet.name=dispatcherExample
+servlet.mapping=/dispatcherExampleURL
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/resources/custom.properties b/spring-boot-servlet/src/main/resources/custom.properties
new file mode 100644
index 0000000000..34f31bcd50
--- /dev/null
+++ b/spring-boot-servlet/src/main/resources/custom.properties
@@ -0,0 +1,4 @@
+dispatcher.servlet.name=dispatcherExample
+dispatcher.servlet.mapping=/dispatcherExampleURL
+example.servlet.name=dispatcherExample
+example.servlet.mapping=/dispatcherExampleURL
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/webapp/WEB-INF/context.xml b/spring-boot-servlet/src/main/webapp/WEB-INF/context.xml
new file mode 100644
index 0000000000..263bed4430
--- /dev/null
+++ b/spring-boot-servlet/src/main/webapp/WEB-INF/context.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/webapp/WEB-INF/dispatcher.xml b/spring-boot-servlet/src/main/webapp/WEB-INF/dispatcher.xml
new file mode 100644
index 0000000000..ade8e66777
--- /dev/null
+++ b/spring-boot-servlet/src/main/webapp/WEB-INF/dispatcher.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/webapp/WEB-INF/web.xml b/spring-boot-servlet/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..60a4b079de
--- /dev/null
+++ b/spring-boot-servlet/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,40 @@
+
+
+ JSP
+
+ index.html
+ index.htm
+ index.jsp
+
+
+
+
+ EEWebXmlServlet
+ com.baeldung.servlets.javaee.EEWebXmlServlet
+
+
+
+ EEWebXmlServlet
+ /eewebxmlservlet
+
+
+
+
+ SpringBootWebXmlServlet
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ /WEB-INF/dispatcher.xml
+
+ 1
+
+
+
+ SpringBootWebXmlServlet
+ /
+
+
+
+
diff --git a/spring-boot-servlet/src/main/webapp/annotationservlet.jsp b/spring-boot-servlet/src/main/webapp/annotationservlet.jsp
new file mode 100644
index 0000000000..f21748df50
--- /dev/null
+++ b/spring-boot-servlet/src/main/webapp/annotationservlet.jsp
@@ -0,0 +1 @@
+Annotation Servlet!
\ No newline at end of file
diff --git a/spring-boot-servlet/src/main/webapp/index.jsp b/spring-boot-servlet/src/main/webapp/index.jsp
new file mode 100644
index 0000000000..e534282777
--- /dev/null
+++ b/spring-boot-servlet/src/main/webapp/index.jsp
@@ -0,0 +1 @@
+Hello!
\ No newline at end of file