diff --git a/spring-boot-modules/spring-boot-basic-customization-2/pom.xml b/spring-boot-modules/spring-boot-basic-customization-2/pom.xml
new file mode 100644
index 0000000000..3ce9266ebe
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+
+ com.baeldung.spring-boot-modules
+ spring-boot-modules
+ 1.0.0-SNAPSHOT
+ ../
+
+
+ spring-boot-basic-customization-2
+ jar
+
+ spring-boot-basic-customization-2
+ Module For Spring Boot Basic Customization 2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/DemoApplication.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/DemoApplication.java
new file mode 100644
index 0000000000..9e8148f043
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/DemoApplication.java
@@ -0,0 +1,15 @@
+package com.baeldung.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@SpringBootApplication
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/conf/WebConf.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/conf/WebConf.java
new file mode 100644
index 0000000000..02fcf152f1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/conf/WebConf.java
@@ -0,0 +1,29 @@
+package com.baeldung.demo.conf;
+
+import com.baeldung.demo.listener.CustomListener;
+import com.baeldung.demo.servlet.CustomServlet;
+import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.ServletContextListener;
+
+@Configuration
+public class WebConf {
+
+ @Bean
+ public ServletRegistrationBean customServletBean() {
+ ServletRegistrationBean bean =
+ new ServletRegistrationBean(new CustomServlet(), "/servlet");
+ return bean;
+ }
+
+ @Bean
+ public ServletListenerRegistrationBean customListenerBean() {
+ ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
+ bean.setListener(new CustomListener());
+ return bean;
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/controller/Controller.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/controller/Controller.java
new file mode 100644
index 0000000000..a6d1812511
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/controller/Controller.java
@@ -0,0 +1,15 @@
+package com.baeldung.demo.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(value = "/")
+public class Controller {
+
+ @GetMapping
+ public String getRequest(){
+ return "Baeldung DispatcherServlet";
+ }
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/filter/CustomFilter.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/filter/CustomFilter.java
new file mode 100644
index 0000000000..c661aecf6d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/filter/CustomFilter.java
@@ -0,0 +1,30 @@
+package com.baeldung.demo.filter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+@Component
+public class CustomFilter implements Filter {
+
+ Logger logger = LoggerFactory.getLogger(CustomFilter.class);
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ logger.info("CustomFilter is invoked");
+ chain.doFilter(request, response);
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/listener/CustomListener.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/listener/CustomListener.java
new file mode 100644
index 0000000000..a9e3ad680f
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/listener/CustomListener.java
@@ -0,0 +1,22 @@
+package com.baeldung.demo.listener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class CustomListener implements ServletContextListener {
+
+ Logger logger = LoggerFactory.getLogger(CustomListener.class);
+
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
+ logger.info("CustomListener is initialized");
+ }
+
+ @Override
+ public void contextDestroyed(ServletContextEvent sce) {
+ logger.info("CustomListener is destroyed");
+ }
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/servlet/CustomServlet.java b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/servlet/CustomServlet.java
new file mode 100644
index 0000000000..fd3e92bedc
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/java/com.baeldung.demo/servlet/CustomServlet.java
@@ -0,0 +1,29 @@
+package com.baeldung.demo.servlet;
+
+import com.baeldung.demo.filter.CustomFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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;
+
+public class CustomServlet extends HttpServlet {
+
+ Logger logger = LoggerFactory.getLogger(CustomServlet.class);
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ logger.info("CustomServlet doGet() method is invoked");
+ super.doGet(req, resp);
+ }
+
+ @Override
+ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ logger.info("CustomServlet doPost() method is invoked");
+ super.doPost(req, resp);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties
new file mode 100644
index 0000000000..8c4690dedc
--- /dev/null
+++ b/spring-boot-modules/spring-boot-basic-customization-2/src/main/resources/application.properties
@@ -0,0 +1,2 @@
+server.servlet.context-path=/demo
+spring.mvc.servlet.path=/baeldung
\ No newline at end of file