diff --git a/spring-mvc-web-vs-initializer/.gitignore b/spring-mvc-web-vs-initializer/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/pom.xml b/spring-mvc-web-vs-initializer/pom.xml
new file mode 100644
index 0000000000..0d735e7188
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/pom.xml
@@ -0,0 +1,201 @@
+
+ 4.0.0
+ com.baeldung
+ spring-mvc-web-vs-initializer
+ 0.1-SNAPSHOT
+
+ spring-mvc-web-vs-initializer
+ war
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.3.6.RELEASE
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+
+ org.springframework
+ spring-web
+
+
+ org.springframework
+ spring-webmvc
+
+
+ org.springframework
+ spring-context
+
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ provided
+
+
+
+ javax.servlet
+ jstl
+ runtime
+
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ ch.qos.logback
+ logback-classic
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+
+
+
+ org.slf4j
+ log4j-over-slf4j
+
+
+
+
+
+ org.springframework
+ spring-test
+ test
+
+
+
+ junit
+ junit
+ test
+
+
+
+ org.assertj
+ assertj-core
+ 3.5.1
+ test
+
+
+
+ org.hamcrest
+ hamcrest-core
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ test
+
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+
+ org.easymock
+ easymock
+ 3.4
+ test
+
+
+
+
+
+
+
+
+
+ org.springframework
+ spring-framework-bom
+ ${org.springframework.version}
+ pom
+ import
+
+
+
+ org.springframework
+ spring-core
+ ${org.springframework.version}
+
+
+
+
+
+
+
+ spring-mvc-web-vs-initializer
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+ 4.3.1.RELEASE
+ 4.0.4.RELEASE
+ 3.20.0-GA
+ 1.2
+
+
+ 4.3.11.Final
+ 5.1.38
+
+
+ 1.7.13
+ 1.1.3
+
+
+ 5.2.2.Final
+
+
+ 19.0
+ 3.4
+
+
+ 1.3
+ 4.12
+ 1.10.19
+
+ 4.4.1
+ 4.5
+
+ 2.9.0
+
+
+ 3.5.1
+ 2.6
+ 2.19.1
+ 2.7
+ 1.4.18
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java
new file mode 100644
index 0000000000..21e33820ca
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java
@@ -0,0 +1,26 @@
+package org.baeldung.config;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+public class AppInitializer implements WebApplicationInitializer {
+
+ @Override
+ public void onStartup(ServletContext container) throws ServletException {
+ AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+ context.setConfigLocation("org.baeldung.config");
+
+ container.addListener(new ContextLoaderListener(context));
+
+ ServletRegistration.Dynamic dispatcher = container.addServlet("java-servlet", new DispatcherServlet(context));
+ dispatcher.setLoadOnStartup(1);
+ dispatcher.addMapping("/java-servlet/*");
+ }
+
+}
diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java
new file mode 100644
index 0000000000..d460113458
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java
@@ -0,0 +1,25 @@
+package org.baeldung.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.ViewResolver;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = "org.baeldung.controller.java")
+public class MvcConfig extends WebMvcConfigurerAdapter {
+
+ @Bean
+ public ViewResolver viewResolver() {
+ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
+ viewResolver.setPrefix("/WEB-INF/view/");
+ viewResolver.setSuffix(".jsp");
+
+ return viewResolver;
+ }
+
+}
diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java
new file mode 100644
index 0000000000..c979c88b34
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java
@@ -0,0 +1,18 @@
+package org.baeldung.controller.java;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller
+public class JavaController {
+
+ @RequestMapping(value = "/endpoint")
+ public ModelAndView handleRequestFromJavaConfiguredServlet() {
+ ModelAndView mv = new ModelAndView();
+ mv.setViewName("from-java");
+
+ return mv;
+ }
+
+}
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java
new file mode 100644
index 0000000000..bdefc1781c
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java
@@ -0,0 +1,18 @@
+package org.baeldung.controller.xml;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller
+public class XmlController {
+
+ @RequestMapping(value = "/endpoint")
+ public ModelAndView handleRequestFromXmlConfiguredServlet() {
+ ModelAndView mv = new ModelAndView();
+ mv.setViewName("from-xml");
+
+ return mv;
+ }
+
+}
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml b/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml
new file mode 100644
index 0000000000..7505614c99
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ /WEB-INF/view/
+
+
+ .jsp
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp
new file mode 100644
index 0000000000..e54d7520dc
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp
@@ -0,0 +1,7 @@
+
+
+
+
+ Java
+
+
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp
new file mode 100644
index 0000000000..986010c183
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp
@@ -0,0 +1,7 @@
+
+
+
+
+ XML
+
+
\ No newline at end of file
diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..9bebc263be
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+
+
+
+ xml-servlet
+
+ org.springframework.web.servlet.DispatcherServlet
+
+ 1
+
+ contextConfigLocation
+ classpath*:mvc-configuration.xml
+
+
+
+
+ xml-servlet
+ /xml-servlet/*
+
+
+
diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java
new file mode 100644
index 0000000000..99b5ef8c2f
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java
@@ -0,0 +1,45 @@
+package org.baeldung.controller;
+
+import org.baeldung.config.MvcConfig;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.AnnotationConfigWebContextLoader;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.servlet.ModelAndView;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@WebAppConfiguration
+@ContextConfiguration(loader=AnnotationConfigWebContextLoader.class, classes = MvcConfig.class)
+public class JavaServletTest {
+
+ private MockMvc mockMvc;
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ @Before
+ public void setUp() {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+ }
+
+ @Test
+ public void testJavaEndpoint() throws Exception {
+ ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/endpoint"))
+ .andReturn()
+ .getModelAndView();
+
+ // validate view name
+ Assert.assertSame(mv.getViewName(), "from-java");
+ }
+
+}
diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java
new file mode 100644
index 0000000000..e7695e36c0
--- /dev/null
+++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java
@@ -0,0 +1,44 @@
+package org.baeldung.controller;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.GenericXmlWebContextLoader;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.servlet.ModelAndView;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@WebAppConfiguration
+@ContextConfiguration(loader=GenericXmlWebContextLoader.class, locations = "classpath*:mvc-configuration.xml")
+public class XmlServletTest {
+
+ private MockMvc mockMvc;
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ @Before
+ public void setUp() {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+ }
+
+ @Test
+ public void testXmlEndpoint() throws Exception {
+ ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/endpoint"))
+ .andReturn()
+ .getModelAndView();
+
+ // validate view name
+ Assert.assertSame(mv.getViewName(), "from-xml");
+ }
+
+}